我已經從oracle遷移了一個數據庫,現在有幾個標量值函數。在SQL中調用標量值函數
然而,當我打電話給他們,我得到一個錯誤說:
無法找到其中任何一列「DBO」或用戶定義的函數或聚合「dbo.chk_mgr」,或者名稱不明確。
我打電話這樣說:
SELECT dbo.chk_mgr('asdf')
我在做什麼錯?
我已經從oracle遷移了一個數據庫,現在有幾個標量值函數。在SQL中調用標量值函數
然而,當我打電話給他們,我得到一個錯誤說:
無法找到其中任何一列「DBO」或用戶定義的函數或聚合「dbo.chk_mgr」,或者名稱不明確。
我打電話這樣說:
SELECT dbo.chk_mgr('asdf')
我在做什麼錯?
你確定這不是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
這句法爲我工作得很好:
CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.test_func('blah')
確定該函數存在的功能和dbo架構下?
是的,它位於標量值函數文件夾下的函數...下 –
PRINT dbo.[FunctionName] ([Parameter/Argument])
例如爲:
PRINT dbo.StringSplit('77,54')
您正在使用內聯表值函數。因此你必須使用Select * From功能。 如果你想使用select函數(),你必須使用標量函數。
https://msdn.microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx
請確保您有選擇正確的數據庫。如果您嘗試在新的查詢窗口中運行主數據庫,您可能會選擇主數據庫。
你能向我們展示有關函數的CREATE語句嗎? –
另外,當你說你打電話給它時,你是從哪裏來的?也許你沒有意識到它指向錯誤的數據庫? –
我剛纔有這個問題。 @ TomH的評論是正確的答案。因爲(就像問題所說),我最喜歡的答案是一個紅鯡魚,我實際上使用了一個標量值函數。 –