![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятная "двуличность" операции "=NULL" [MSSQL]
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 не вызывается.
Почему тогда такое разное поведение для одинаковых по сути операций?