2012-12-07 38 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