执行sp_executesql错误
我有一个公式,这个公式是一个nvarhcar,比如“2+5+8/3” 我想做一个函数,在计算我的公式后,给我一个如下的结果执行sp_executesql错误,sql,sql-server-2008,tsql,sql-server-2005,Sql,Sql Server 2008,Tsql,Sql Server 2005,我有一个公式,这个公式是一个nvarhcar,比如“2+5+8/3” 我想做一个函数,在计算我的公式后,给我一个如下的结果 alter FUNCTION Calculate(@Formula NVARCHAR(100)) RETURNS FLOAT AS BEGIN DECLARE @Result2 FLOAT,@Query NVARCHAR(50) SET @Query=N'select @Result='+@Formula execute sp_executesql @Query ,N'@R
alter FUNCTION Calculate(@Formula NVARCHAR(100))
RETURNS FLOAT
AS
BEGIN
DECLARE @Result2 FLOAT,@Query NVARCHAR(50)
SET @Query=N'select @Result='+@Formula
execute sp_executesql @Query ,N'@Result float output',@Result=@Result2 OUTPUT
RETURN @Result2
END
函数创建成功,但我使用了该函数
Select * from dbo.Function1()
选择dbo.Calculate('2+5+9'))
我得到一个错误
“只能从函数中执行函数和扩展存储过程。”
你怎么能做这样的函数呢?非常感谢
谢谢你的回答,但我将在选择查询中使用它, 我的数据是这样的
Name Formula Result
dd 2+3+5
gg 1+4+7
hh 2*8
jj 3*9
Kl 8*9
我必须计算结果列a选择
像
挑选
名称,dbo.Calculate(公式)作为结果
是否有另一种方法来实现它您可能不想创建一个
函数
,而是创建一个过程
,因为函数具有通常无法使用执行的限制。它们应该是无副作用的,并且可以使用EXEC
来规避这一保证。您可以使用以下类似的方式:
Create Proc Proc1
As
Begin
Select 'SQL Server'
End
Go
创建一个函数
Create Function dbo.Function1() Returns @Result Table
(
Result Varchar(100)
)
As
Begin
Insert @Result
SELECT * from OPENROWSET('SQLNCLI10', 'Server=<SERVERNAME>;UID=<LOGIN>;Pwd= <PASSWORD>;',
'Exec dbo.Proc1') AS C
Return
end
Go
希望这能帮助您……谢谢您的回答,但我会在选择查询中使用它,我的数据如名称公式结果dd 2+3+5 gg 1+4+7 hh 2*8 jj 3*9 Kl 8*9我必须计算结果列选择名称dbo。计算(公式)作为结果是否有其他方法使其变得困难。搜索“SQL Server在查询中执行过程”。你不会找到一个简单的答案,因为没有。如果它必须是一个函数,你必须创建一个clr函数。您不能在典型的udf中调用过程或执行动态sql。