2

我有一个公式。公式是一个像 '2+5+8/3' 这样的 nvarhcar

我想创建一个函数,在计算出我的公式后给我一个类似的结果

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

我必须计算结果列选择

选择 Name,dbo.Calculate(Formula) as Result 是否有另一种方法可以做到

4

2 回答 2

1

您可能不想创建 a FUNCTIONbut aPROCEDURE因为函数具有它们通常无法使用的限制EXECUTE。它们旨在无副作用,EXEC可用于规避该保证。

于 2012-12-07T21:22:57.593 回答
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()

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

于 2012-12-09T05:07:02.360 回答