【问题标题】:Insert into Table Valued Function return using dynamic SQL使用动态 SQL 插入表值函数返回
【发布时间】:2017-08-04 17:32:33
【问题描述】:

我有一个表值函数,其中一些参数可以为空,而其他参数定义了该函数将使用的一些表和列名称。不幸的是,这意味着需要动态 SQL。当我在 SSMS 中使用时,查询运行完美,但尝试将其转换为函数会导致

消息 443,级别 16,状态 14,过程事件,第 67 行 [批处理开始第 0 行] 在函数中无效使用副作用运算符“INSERT EXEC”。

该函数用于获取事件的名称,该名称将构成事件的数据源,以及事件表的键列"e.'+@eventType+'ID"'e.'+@eventType+'Number'

该函数将根据返回生成一个报告,并在另一个过程中加入以生成另一个报告。

我环顾四周,但大多数示例和类似问题根本不适用,通常是希望修改数据库中的表,而不是表变量,或者不希望插入返回表变量。有没有办法绕过这个限制,无论是使用临时表还是在动态 sql 中插入?

IF (@childEvent IS NOT NULL) BEGIN
    SET @SQL = ' SELECT e.ProductID, e.ProductName, e.'+@eventType+'Number, e.Quantity - ISNULL(c.Quantity,0) AS Quantity '
         +' FROM {schema}.'+@eventType+'Table e '
         +' LEFT OUTER JOIN {schema}.'+@childEvent+'Table c '
         +' ON c.'+@eventType+'ID = e.'+@eventType+'ID '
END
INSERT INTO @Events 
EXECUTE sp_executesql @SQL, N'@asOfDate Date',@asOfDate

【问题讨论】:

  • 使用存储过程或 CLR 表值函数。不能在表值函数中执行动态 SQL。

标签: sql sql-server ssms


【解决方案1】:

您不能在表值函数中使用动态 SQL。

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 2016-05-06
    • 2018-03-21
    • 2017-09-30
    • 2017-06-27
    • 2011-09-14
    • 2021-05-10
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多