gpt4 book ai didi

sql-server - 为什么我不能在 T-SQL 函数中的表变量上运行 INSERT EXEC?

转载 作者:行者123 更新时间:2023-12-01 11:20:47 26 4
gpt4 key购买 nike

我的函数如下所示:

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.



我认为对函数中表变量的操作不被视为副作用操作?

最佳答案

INSERT ... EXEC是一个副作用运算符,因为它最终会在幕后创建一个临时表。

这是在 the execution plan for this dbfiddle 中显示的参数表扫描的背后

The Hidden Costs of INSERT EXEC有关更多信息。

您最好编写一个 CLR 函数来执行此操作。

关于sql-server - 为什么我不能在 T-SQL 函数中的表变量上运行 INSERT EXEC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43864069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com