Почему SET ANSI_WARNINGS ON должен быть с методами XML? - PullRequest
0 голосов
/ 09 ноября 2019

Документация https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansi-warnings-transact-sql не говорит о XML, база данных по умолчанию отключена, есть триггер базы данных, в котором подрядчики добавили этот параметр, говоря, что для XML он должен быть включен:

create trigger tDDLLog on database
for DDL_DATABASE_LEVEL_EVENTS
as
SET NOCOUNT ON
SET ANSI_WARNINGS ON --contractors added this and…
declare @data XML = EVENTDATA()
if (select @data.value('(/EVENT_INSTANCE/ObjectName)[1]','varchar(max)')) is not null
insert DDLLog (LoginName,HostName,ObjectName,ObjectType,EventType,EventSQLCommand,EventTime,XMLChange)
values (
 @data.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(2000)')
 ,HOST_NAME()
 ,@data.value('(/EVENT_INSTANCE/ObjectName)[1]','varchar(100)')
 ,@data.value('(/EVENT_INSTANCE/ObjectType)[1]','varchar(100)')
 ,@data.value('(/EVENT_INSTANCE/EventType)[1]','varchar(100)')
 ,@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','varchar(max)')
 ,getdate()
 ,@data
)
SET ANSI_WARNINGS OFF --… this
go

В Интернете я нашел такое сообщение " 'ANSI_WARNINGS'. Убедитесь, что параметры SET являются правильными для использования с индексированными представлениями и / или индексами для вычисляемых столбцов и / или отфильтрованными индексами и / или запросами на уведомления и / илиМетоды типов данных XML и / или операции с пространственным индексом."Но почему тогда триггер работал с моими обновлениями хранимых процедур и мешал подрядчику? Я не могу воссоздать ситуацию ... Я хотел бы знать, какие еще скрытые трудности существуют?

...