2014-01-26 53 views
10

我建立一個功能,我試圖去執行它......但有些錯誤發生如何在SQL Server中執行函數2008

CREATE FUNCTION dbo.Afisho_rankimin(@emri_rest int) 
RETURNS int 
AS 
    BEGIN 
     Declare @rankimi int 
     Select @rankimi=dbo.RESTORANTET.Rankimi 
     From RESTORANTET 
     Where [email protected]_rest 
     RETURN @rankimi 
    END 
    GO 
    SELECT dbo.Afisho_rankimin(5)AS Rankimi 
    GO 

的錯誤,當我執行它是:

消息2714,級別16,狀態3,過程Afisho_rankimin,第11行
數據庫中已有一個名爲'Afisho_rankimin'的對象。

,也有人說:

找不到列「DBO」,或者用戶定義的函數,或聚合「dbo.Afisho_rankimin」,或者名稱不明確

+0

請有人幫我嗎? – user3233650

+0

您是否有另一個具有不同類型名稱的對象?在sys.objects中查找具有該名稱的東西。 –

回答

12

看起來你的數據庫中有另外一種叫做Afisho_rankimin的東西,所以函數沒有被創建。嘗試調用你的函數別的東西。例如。

CREATE FUNCTION dbo.Afisho_rankimin1(@emri_rest int) 
RETURNS int 
AS 
    BEGIN 
     Declare @rankimi int 
     Select @rankimi=dbo.RESTORANTET.Rankimi 
     From RESTORANTET 
     Where [email protected]_rest 
     RETURN @rankimi 
    END 
    GO 

請注意,您只需要調用一次,而不是每次調用該函數。之後嘗試調用

SELECT dbo.Afisho_rankimin1(5) AS Rankimi 
+1

看起來像select引發了一個沒有這個函數的錯誤。 –

+0

我明顯看到有其他名字叫做那個名字。將修改答案 –

+0

我也嘗試過使用'SELECT myfunctionname .......',但它給了我錯誤,因爲'無效的列名' – BNN

1

你可以這樣, 更新的功能再次使用之前創建功能。

Alter FUNCTION dbo.Afisho_rankimin(@emri_rest int) 
RETURNS int 
AS 
    BEGIN 
    Declare @rankimi int 
    Select @rankimi=dbo.RESTORANTET.Rankimi 
    From RESTORANTET 
    Where [email protected]_rest 
    RETURN @rankimi 
END 
GO 

SELECT dbo.Afisho_rankimin(5) AS Rankimi 
GO 
+3

這是危險的建議,如果最初創建的函數是爲了不同的東西,甚至可能是由別人創建。除非您已經確切知道它的功能,否則不應該改變函數或存儲過程或表或視圖。 – HLGEM

8

我已經來到這個問題和下面的幾個。

how to call scalar function in sql server 2008

每一次,我嘗試輸入使用SQL Server Management Studio中,或SSMS這裏顯示的語法,看結果的功能,每一次我得到的錯誤。

對我來說,這是因爲我的結果集是表格數據格式。因此,看到在SSMS的結果,我要這樣稱呼它:

SELECT * FROM dbo.Afisho_rankimin_TABLE(5); 

據我所知,作者的問題,涉及到標量函數,所以這個答案只有幫助別人誰前來經常計算器時,他們對查詢有問題(像我一樣)。

我希望這可以幫助他人。

相關問題