我有一个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
答案 0 :(得分:0)
您不能在表值函数中使用动态SQL。