繁体   English   中英

为什么我不能在T-SQL函数中的表变量上运行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时,我收到以下错误:

在函数中无效使用副作用运算符“INSERT EXEC”。

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

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

这是在此dbfiddle的执行计划中显示的参数表扫描的后面

有关详细信息,请参阅INSERT EXEC的隐藏成本

你最好写一个CLR函数来做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM