为什么我不能在 T-SQL 函数的 table 变量上 运行 INSERT EXEC?
Why can't I run INSERT EXEC on a table variable in a T-SQL function?
我的函数如下所示:
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 时,出现以下错误:
Invalid use of a side-effecting operator 'INSERT EXEC' within a
function.
我认为对函数中 table 变量的操作不被视为副作用操作?
INSERT ... EXEC
是一个副作用运算符,因为它最终会在幕后创建一个临时 table。
这是the execution plan for this dbfiddle
中显示的参数table扫描的后面
有关详细信息,请参阅 The Hidden Costs of INSERT EXEC。
您最好编写一个 CLR 函数来执行此操作。
我的函数如下所示:
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 时,出现以下错误:
Invalid use of a side-effecting operator 'INSERT EXEC' within a function.
我认为对函数中 table 变量的操作不被视为副作用操作?
INSERT ... EXEC
是一个副作用运算符,因为它最终会在幕后创建一个临时 table。
这是the execution plan for this dbfiddle
中显示的参数table扫描的后面有关详细信息,请参阅 The Hidden Costs of INSERT EXEC。
您最好编写一个 CLR 函数来执行此操作。