2011-09-01 48 views
19

我已經從oracle遷移了一個數據庫,現在有幾個標量值函數。在SQL中調用標量值函數

然而,當我打電話給他們,我得到一個錯誤說:

無法找到其中任何一列「DBO」或用戶定義的函數或聚合「dbo.chk_mgr」,或者名稱不明確。

我打電話這樣說:

SELECT dbo.chk_mgr('asdf') 

我在做什麼錯?

+1

你能向我們展示有關函數的CREATE語句嗎? –

+2

另外,當你說你打電話給它時,你是從哪裏來的?也許你沒有意識到它指向錯誤的數據庫? –

+0

我剛纔有這個問題。 @ TomH的評論是正確的答案。因爲(就像問題所說),我最喜歡的答案是一個紅鯡魚,我實際上使用了一個標量值函數。 –

回答

17

你確定這不是Table-Valued Function

我之所以問:

CREATE FUNCTION dbo.chk_mgr(@mgr VARCHAR(50)) 
RETURNS @mgr_table TABLE (mgr_name VARCHAR(50)) 
AS 
BEGIN 
    INSERT @mgr_table (mgr_name) VALUES ('pointy haired boss') 
    RETURN 
END 
GO 

SELECT dbo.chk_mgr('asdf') 
GO 

結果:

Msg 4121, Level 16, State 1, Line 1 
Cannot find either column "dbo" or the user-defined function 
or aggregate "dbo.chk_mgr", or the name is ambiguous. 

但是......

SELECT * FROM dbo.chk_mgr('asdf') 

mgr_name 
------------------ 
pointy haired boss 
6

這句法爲我工作得很好:

CREATE FUNCTION dbo.test_func 
(@in varchar(20)) 
RETURNS INT 
AS 
BEGIN 
    RETURN 1 
END 
GO 

SELECT dbo.test_func('blah') 

確定該函數存在的功能和dbo架構下?

+1

是的,它位於標量值函數文件夾下的函數...下 –

12
PRINT dbo.[FunctionName] ([Parameter/Argument]) 

例如爲:

PRINT dbo.StringSplit('77,54') 
-1

請確保您有選擇正確的數據庫。如果您嘗試在新的查詢窗口中運行主數據庫,您可能會選擇主數據庫。