SQL Server: может ли хранимый процесс, который обновляет таблицы, вызываться из ULF CLR - PullRequest
3 голосов
/ 18 октября 2010

Не знаю почему, но пользовательские функции CLR не позволяют обновлять таблицы.

Можно ли обойти это ограничение, вызвав хранимую процедуру из CLR UDF, которая обновляет таблицы для него?

1 Ответ

1 голос

Это не CLR UDF, это любая RDBMS Функция UDF, по определению, не может изменить состояние базы данных, т.е. задействовать:

  • DELETE, INSERT, UPDATE(т.е. DML) операторы,
  • вызовы хранимых процедур,
  • постоянное изменение значения переменной среды сервера,
  • и т. д.
    , а также использование вызовов недетерминированных(с одним и тем же вводом, возвращающим разные результаты) функции (такие как GETDATE (), NEWID () и т. д.)

Обновление:
Упс, SQL Server 2008 ослабил ограничения на использование недетерминированные функции.Если UDF использует недетерминированный, то он считается недетерминированным.

Это можно проверить по:

SELECT OBJECTPROPERTY(OBJECT_ID('dbo.FunctionName'),'IsDeterministic') 
...