Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 перестал работать скрипт  [new]
sdh
Member

Откуда:
Сообщений: 33
DECLARE @a INT
IF @a IN (NULL, 0)
BEGIN
	PRINT '@a is NULL'
END

до недавнего времени скрипт отрабатывал, все было норм. теперь же отказывается, работает лишь такая конструкция:
DECLARE @a INT
IF @a IS NULL OR @a = 0
BEGIN
	PRINT '@a is NULL'
END

что то явно изменилось, возможно на уровне сервера, понять не могу где. верхний скрипт работал годами, в куче мест
сервер - MS SQL 2005
5 июл 16, 05:03    [19369098]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать скрипт  [new]
sdh
Member

Откуда:
Сообщений: 33
читаю BOL
BOL
Внимание!
Для любых значений NULL, возвращаемых в полях subquery или expression, которые сравниваются со значением test_expression с помощью предложения IN или NOT IN, возвращается результат UNKNOWN. Использование значений NULL с предложениями IN или NOT IN может привести к непредвиденным результатам.
согласно данной информации NULL в IN вроде как нельзя использовать. Но тогда закономерный вопрос - а как оно тогда работало раньше ??
5 июл 16, 05:14    [19369101]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать скрипт  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Изменилась настойка ansi_nulls. Была OFF, а стала ON.

Вот так:

set ansi_nulls off

DECLARE @a INT
IF @a IN (NULL, 0)
BEGIN
	PRINT '@a is NULL'
END


Будет работать.
Но это нехорошо, сравнения с NULL следует избегать, пользоваться только IS NULL, IS NOT NULL
5 июл 16, 05:17    [19369102]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать скрипт  [new]
sdh
Member

Откуда:
Сообщений: 33
3unknown
Изменилась настойка ansi_nulls. Была OFF, а стала ON.
Вот так:
set ansi_nulls off

DECLARE @a INT
IF @a IN (NULL, 0)
BEGIN
	PRINT '@a is NULL'
END

Будет работать.
Но это нехорошо, сравнения с NULL следует избегать, пользоваться только IS NULL, IS NOT NULL

спасибо!
я уже понял, что нехорошо, буду править скрипты. они писались ооочень давно, начиная еще с MSSQL 6.5, лет 10 назад :)
сейчас задача стояла вернуть работоспособность скриптов
5 июл 16, 05:28    [19369106]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать скрипт  [new]
sdh
Member

Откуда:
Сообщений: 33
все. понял, что случилось. я вчера-позавчера массово изменял процедуры, вставлял кусок скрипта в каждую
сейчас посмотрел на скрипт, который формируется для ALTER PROCEDURE :
USE [Database]
GO
/****** Object:  StoredProcedure [dbo].[mmm]    Script Date: 07/05/2016 12:34:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[mmm]
AS
...
видимо, ДО изменения в процедуре было выставлено SET ANSI_NULLS OFF, ну и я это "исправил" ))
5 июл 16, 05:42    [19369109]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить