2012-12-07 35 views
2

我有一个formula.And公式是像“2 + 5 + 8/3” nvarhcar执行sp_executesql的错误

我要作出这样的计算我的公式后的功能给我像

alter FUNCTION Calculate(@Formula NVARCHAR(100)) 
RETURNS FLOAT 
AS 
BEGIN 
DECLARE @Result2 FLOAT,@Query NVARCHAR(50) 
SET @Query=N'select @Result='[email protected] 
execute sp_executesql @Query ,N'@Result float output',@[email protected] 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 

我要计算结果列的选择 像

选择 名称,dbo.Calculate(公式)的结果 有另一种方式,使其

+1

如果一定是一个功能,你必须创建一个clr函数。你不能在典型的udf中调用过程或执行动态sql。 – canon

回答

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

希望这有助于你....

1

你可能不要不想创建FUNCTION,而是创建PROCEDURE,因为函数具有通常不能使用EXECUTE的限制。它们是为了避免副作用,并且可以用来规避这种担保。

+0

感谢您的回答,但我会在选择查询中使用它, 我的数据一样, 名称公式结果 DD 2 + 3 + 5 GG 1 + 4 + 7 HH 2 * 8 JJ 3 * 9 吉隆坡8 * 9 我要计算结果列的选择 像 选择 名称,dbo.Calculate(公式)的结果 有另一种方式,使其 – user1624185

+0

这将是困难的。搜索“查询中的SQL Server执行过程”。你不会找到一个简单的答案,因为没有。 – usr

+0

非常感谢答复 – user1624185