Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятная "двуличность" операции "=NULL" [MSSQL]


Страницы:   1 2

Bless ©   (2005-07-20 10:00:00) 

Есть таблица t1 (kod float, name char(10))
В ней буквально пара строк, в одной из которых kod= NULL
Написал процедуру

CREATE PROCEDURE [dbo].[vx]
AS
SELECT * FROM t1 where kod=NULL


и в Query Analizer-е выполнил :


exec vx
select * from t1 where kod=NULL


В результате выполнения команды EXEC получил одну строку,
в результате работы команды SELECT - ни одной.
На всякий случай посмотрел в профайлере : нигде при выполнении этого батча
SET ANSI_NULLS не вызывается.
Почему тогда такое разное поведение для одинаковых по сути операций?


Nikolay M.   (2005-07-20 10:43:00) [21]


> Ярослав   (20.07.05 10:36) [4]
> Тебе уже ответили, с Null ничего сравнивать нельзя

Не понимаю, зачем лепить такие ответы, если не понимаешь, в чем проблема.

USE pubs

SET ANSI_NULLS ON

SELECT * FROM discounts WHERE stor_id = NULL
SELECT * FROM discounts WHERE stor_id IS NULL

SET ANSI_NULLS OFF

SELECT * FROM discounts WHERE stor_id = NULL
SELECT * FROM discounts WHERE stor_id IS NULL


Nikolay M.   (2005-07-20 10:38:00) [22]

Читай бол по CREATE PROCEDURE. Что за манера все валить на "этот глупый компьютер"?

SQL Server saves the settings of both SET QUOTED_IDENTIFIER and SET ANSI_NULLSwhen a stored procedure is created or altered. These original settings are used when the stored procedure is executed. Therefore, any client session settings for SET QUOTED_IDENTIFIER and SET ANSI_NULLS are ignored during stored procedure execution. SET QUOTED_IDENTIFIER and SET ANSI_NULLS statements that occur within the stored procedure do not affect the functionality of the stored procedure.


Ярослав   (2005-07-20 10:36:00) [23]

Тебе уже ответили, с Null ничего сравнивать нельзя, почитай учебник по SQL, для этого есть is Null


Bless   (2005-07-20 10:32:00) [24]

evvcom[2]>

Да я знаю, что правильно писать IS NULL. Но ведь проблему это не отменяет, не так ли?
Там где я в примере в процедуре поставил =NULL на самом деле стоит
=@param, который оказался равным NULL. Результат работы процедуры лменя слегка удивил и я скопировал содержимое в Query Analizer, чтоб проверить и удивился еще больше.

Может вместо того, чтоб искать нелепости в моем примере, можешь сказать что-нибудь по сути?


evvcom   (2005-07-20 10:04:00) [25]


> kod=NULL

kod is NULL!


Bless   (2005-07-20 10:01:00) [26]

Забыл закрывающий тэг. Исправляюсь.

Есть таблица t1 (kod float, name char(10))
В ней буквально пара строк, в одной из которых kod= NULL
Написал процедуру

CREATE PROCEDURE [dbo].[vx]
AS
SELECT * FROM t1 where kod=NULL


и в Query Analizer-е выполнил :


exec vx
select * from t1 where kod=NULL


В результате выполнения команды EXEC получил одну строку,
в результате работы команды SELECT - ни одной.
На всякий случай посмотрел в профайлере : нигде при выполнении этого батча
SET ANSI_NULLS не вызывается.
Почему тогда такое разное поведение для одинаковых по сути операций?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо