执行sp_executesql错误

时间:2012-12-07 21:12:51

标签: 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'@Result float output',@Result=@Result2 OUTPUT
RETURN @Result2
END

函数创建成功但我使用函数

选择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

我必须将Result列计算为select 像

选择 名称,dbo.Calculate(公式)作为结果 还有另一种方法吗

2 个答案:

答案 0 :(得分:1)

您可能不想创建FUNCTION而是PROCEDURE,因为函数具有通常无法使用EXECUTE的限制。它们意味着没有副作用,EXEC可以用来规避这种保证。

答案 1 :(得分:0)

你可以像下面这样:

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

执行功能

  Select * from dbo.Function1()

希望这可以帮助你......