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

Откуда: Владик
Сообщений: 2169
Всем привет.
При создании новой процедуры в БД через SSMS в код автоматически добавляются эти строки:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


Убираю эти строки, выполняю скрипт на создание процедуры, процедура создается - Ок.
Создаю скрипт для только что созданной процедуры используя ALTER (контекстное меню SSMS), удаленные строки снова присутствуют:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


Вопрос - откуда берутся эти настройки, если в параметрах БД для столбца is_ansi_nulls_on указано значение 0 ?
Проверяла запросом:

select is_ansi_nulls_on from sys.databases where name = 'Моя БД'


ну и через окно Свойства БД -> Параметры -> Включены ANSI NULL = false

Проверка через функцию @@options, показывает что ANSI_NULLS = ON, в моем примере вернулось 1:

select 'ANSI_NULLS', case when (32 & @@options) = 32 then 1 else 0 end


Интерес связан с тем, что у нас много скриптов по автоматическому созданию / изменению ХП, которые содержат код:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


Если этот код из скриптов я уберу, есть гарантии что процедуры накатятся с этими же настройками? Как эти гарантии проверить / создать ?))
Либо киньте ссылку что почитать.



-----------------------------------------------
А мы тут плюшками балуемся...

Аленочка тм
18 ноя 20, 03:52    [22234311]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SET ANSI_NULLS ON  [new]
Тяп-ляп
Member

Откуда: Москва
Сообщений: 801
Эти два флага сохраняются при создании/изменении процедуры вместе с ее кодом.
Посмотреть можно в таблице sys.sql_modules в столбцах uses_ansi_nulls, uses_quoted_identifier.
Значения флагов берутся из сессии, в которой создается/изменяется процедура.

Не убирайте из ваших скриптов эти флаги, т.к. программа, которая будет прогонять скрипты, может при создании сессии установить флаги не так, как у вас было.
После этого процедура может выполняться по-другому.
Флаги важны.
18 ноя 20, 11:28    [22234438]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по SET ANSI_NULLS ON  [new]
Аленочка
Member

Откуда: Владик
Сообщений: 2169
Тяп-ляп

Посмотреть можно в таблице sys.sql_modules в столбцах uses_ansi_nulls, uses_quoted_identifier.


Вот такой запрос не вернул ни одной записи:
 select * from sys.sql_modules where uses_ansi_nulls = 0 or uses_quoted_identifier = 0


Поэтому, получается что сейчас на всех процедурах флаги выставлены в соответствии с тем что нужно, и программа, которая накатывает скрипты, работает в соответствии с ожидаемым.
Но наверное соглашусь, флаги в коде лучше оставить для подстраховки.
18 ноя 20, 13:30    [22234557]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить