我的功能如下:
CREATE FUNCTION fn_FileSys_DirExists(@dirName AS nvarchar(260))
RETURNS bit
AS
BEGIN
DECLARE @dirExists int
DECLARE @fileResults TABLE
(
file_exists int,
file_is_a_directory int,
parent_directory_exists int
)
INSERT @fileResults (file_exists, file_is_a_directory, parent_directory_exists)
EXEC master.dbo.xp_fileexist @dirName
SELECT @dirExists = file_is_a_directory FROM @fileResults
RETURN @dirExists
END
当我尝试执行上面的SQL时,出现以下错误:
无效使用副作用操作符' INSERT EXEC'在一个 功能
我认为函数中对表变量的操作不被视为副作用操作吗?
答案 0 :(得分:5)
INSERT ... EXEC
是一个副作用运算符,因为它最终会在幕后创建一个临时表。
这是the execution plan for this dbfiddle
中显示的参数表扫描的背后有关详情,请参阅The Hidden Costs of INSERT EXEC。
你最好写一个CLR函数来做这件事。