执行sp_executesql错误

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

我有一个公式,这个公式是一个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
函数创建成功,但我使用了该函数

  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。