在多标量表值函数中调用存储过程?
Posted
技术标签:
【中文标题】在多标量表值函数中调用存储过程?【英文标题】:Call a stored procedure in multi scalar table-valued function? 【发布时间】:2012-10-11 12:56:06 【问题描述】:有没有办法像那样在多标量表值函数中调用存储过程?
注意:此查询返回错误:
在函数中无效使用副作用运算符“INSERT EXEC”。
T-SQL 代码:
CREATE FUNCTION fnCrSum
(
@ay nvarchar(100), @yil nvarchar(4), @tip nvarchar(25)
)
RETURNS
@tablo TABLE
(
id int,
ref_num int,
last_name nvarchar(200),
grup nvarchar(200),
analist nvarchar(200),
durum nvarchar(10),
start_dt int ,
end_dt int,
duration int,
type nvarchar(10),
bildirim nvarchar(200)
)
AS
BEGIN
DECLARE @exec NVARCHAR(250)
SET @exec = 'exec dbo.spCrSum ''' + @ay + ''', ''' + @yil + ''', ''' + @tip + ''''
INSERT INTO @tablo
exec (@exec)
RETURN
END
GO
【问题讨论】:
【参考方案1】:函数不能有副作用,即更改数据。
即使你的存储过程没有改变任何东西,SQL 编译器也不能假设,所以它就是不允许的。
为什么需要将它包装在一个函数中?
【讨论】:
因为,Business Objects Designer 端存在技术问题。【参考方案2】:您不能在函数中执行存储过程。
【讨论】:
【参考方案3】:我解决了这个问题。我编写了一个表值函数,包括可执行查询、返回表并准备了一个存储过程来调用该函数并传递参数。它对我有用。
【讨论】:
以上是关于在多标量表值函数中调用存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
使用带有标量函数的 where 条件与使用交叉应用和表值函数的 where 条件