为什么在标量值函数中使用动态sql时,出现查询错误:"只有函数和扩展存储过程才能从函数内部执行。" 测试实例如下: ALTER FUNCTION [dbo].[fx_rpt]
(
) RETURNS decimal(18,2) AS
BEGIN
declare @rtn decimal(18,2)
declare @strsql nvarchar(max)
set @strsql='set @strsql='select @x=count(*) from subject'
exec sp_executesql @strsql,N'@x int output',@rtn output
return @rtn
END
GO
select dbo.fx_rpt时提示: "只有函数和扩展存储过程才能从函数内部执行。"
(
) RETURNS decimal(18,2) AS
BEGIN
declare @rtn decimal(18,2)
declare @strsql nvarchar(max)
set @strsql='set @strsql='select @x=count(*) from subject'
exec sp_executesql @strsql,N'@x int output',@rtn output
return @rtn
END
GO
select dbo.fx_rpt时提示: "只有函数和扩展存储过程才能从函数内部执行。"
@rtn decimal(18,2)
ASdeclare @strsql nvarchar(max)
set @strsql='select @x=count(*) from subject'
exec sp_executesql @strsql,N'@x int output',@rtn output
GO
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句调用扩展存储过程。