2017-08-04 108 views
1

我有一个表值函数,其中一些参数为空,其他人定义函数将使用的一些表和列名称。这意味着不幸的是需要动态SQL。查询完美地跑,当我在SSMS使用,而是试图把它变成一个功能导致插入到表值函数返回使用动态SQL

消息443,级别16,状态14,过程活动,67号线[批量起始线0] 在函数中无效使用副作用运算符'INSERT EXEC'。

功能是为了拿一个事件,这将形成事件的数据源的名称和事件表的键列,

功能将已生成"e.'[email protected]+'ID"'e.'[email protected]+'Number'报告基于退货,并加入到另一个程序中以生成另一个报告。

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

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

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

回答

0

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