3

我正在开发一个函数,该函数需要调用一个返回 N 行的存储过程,然后将结果插入临时表作为其处理的一部分。

在存储过程上调用 EXEC 就可以了: http ://sqlfiddle.com/#!3/ed11a/16

那么为什么将 EXEC 的结果插入到表变量中会引发错误: http ://sqlfiddle.com/#!3/ed11a/18

我得到的错误是:Invalid use of side-effecting or time-dependent operator in 'INSERT EXEC' within a function.

我知道这个错误通常是在试图操作不是函数本地的值时产生的,但是插入是在一个表变量上,所以这不应该是一个问题。

4

1 回答 1

3

虽然您只是插入到表变量中,但不能保证您调用的存储过程不会产生副作用。没有办法阻止从函数调用的存储过程插入/更新/删除任意数据,甚至修改模式。您可能可以使用表值函数而不是存储过程调用来实现您想要做的事情。

Alter function dbo.MyTable() 
RETURNS  @table TABLE 
(
    -- columns returned by the function
    Col1 int null, 
    Col2 int null, 
    Col3 int null,
    Col4 int null,
    Col5 int null, 
    Col6 int null

)
as
Begin
INSERT INTO @table Values( null, null, 5, null, 63, null)

return 
End
于 2012-07-17T15:49:09.060 回答