powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по SET ANSI_NULLS ON
3 сообщений из 3, страница 1 из 1
Вопрос по SET ANSI_NULLS ON
    #40019773
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
При создании новой процедуры в БД через SSMS в код автоматически добавляются эти строки:

Код: sql
1.
2.
3.
4.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



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

Код: sql
1.
2.
3.
4.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



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

Код: sql
1.
select is_ansi_nulls_on from sys.databases where name = 'Моя БД'



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

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

Код: sql
1.
select 'ANSI_NULLS', case when (32 & @@options) = 32 then 1 else 0 end



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

Код: sql
1.
2.
3.
4.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



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



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

Аленочка тм
...
Рейтинг: 0 / 0
Вопрос по SET ANSI_NULLS ON
    #40019852
Тяп-ляп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти два флага сохраняются при создании/изменении процедуры вместе с ее кодом.
Посмотреть можно в таблице sys.sql_modules в столбцах uses_ansi_nulls, uses_quoted_identifier.
Значения флагов берутся из сессии, в которой создается/изменяется процедура.

Не убирайте из ваших скриптов эти флаги, т.к. программа, которая будет прогонять скрипты, может при создании сессии установить флаги не так, как у вас было.
После этого процедура может выполняться по-другому.
Флаги важны.
...
Рейтинг: 0 / 0
Вопрос по SET ANSI_NULLS ON
    #40019910
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тяп-ляп

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


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



Поэтому, получается что сейчас на всех процедурах флаги выставлены в соответствии с тем что нужно, и программа, которая накатывает скрипты, работает в соответствии с ожидаемым.
Но наверное соглашусь, флаги в коде лучше оставить для подстраховки.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по SET ANSI_NULLS ON
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]