使用动态SQL插入表值函数返回

时间:2017-08-04 17:32:33

标签: sql sql-server ssms

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

  
    

Msg 443,Level 16,State 14,Procedure Events,Line 67 [Batch Start Line 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

1 个答案:

答案 0 :(得分:0)

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