2013-06-29 101 views
2

我使用SQL Server 2008和Borland Delphi來開發我的應用程序。從最近我得到一個非常奇怪的錯誤。SQL Server找不到我的功能

Cannot find either column 「dbo」 or the user-defined function or aggregate 「dbo.FunctionName」, or the name is ambiguous."

我有:我已經創建了我在我的應用程序使用多個標量函數,但我有一個客戶的問題,在他的公司時,我打電話給我的標量函數,我的軟件返回以下錯誤已經搜索了很多,所以請記住:

  1. 函數存在;
  2. 我正在查詢正確的數據庫;
  3. 沒有錯別字;
  4. 所有者模式是dbo;
  5. 與所有我的功能發生此問題;

    ,而最古怪......

  6. 它只有當我打電話給他們,從我的應用程序,如果我跑在查詢分析器使用相同的用戶完全相同的代碼發生,它將會運行得很好。

我在其他幾個客戶有這個相同的功能,他們沒有任何問題。它可能是一個SQL Server問題?

Ps:對不起,我的英語不好,第一個問題在這裏。

+0

您是否有多個數據庫在同一臺服務器上訪問?或者您是否嘗試刪除前綴dbo? – Edper

+0

我在這臺服務器上只有一個數據庫。而當我嘗試調用沒有「dbo」前綴的函數時,我得到這個錯誤:「The」函數名稱「不是一個公認的內置函數名稱」。 – artie

+0

請快速檢查並確保它們未使用區分大小寫的排序規則。儘管所有MS都否認會發生這種情況,但我也遇到了類似的問題。 –

回答

0

我不知道QueryAnalyzer如何調用你的函數,但我知道這個錯誤。
通常,當您有用戶定義的函數時,您需要在函數前加上模式名稱。

所以,如果你的函數是在架構「DBO」,該名稱是「fnPadLeft」,你需要調用的函數代碼:

SELECT 
    id 
    ,some_field 
    ,dbo.fnPadLeft(some_other_field) 
FROM YOUR_TABLE_NAME 

如果你這樣稱呼它:

SELECT 
    id 
    ,some_field 
    ,fnPadLeft(some_other_field) -- lacks dbo. 
FROM YOUR_TABLE_NAME 

然後你會得到「沒有這樣的功能」。
這隻發生在標量函數順便說一句。 (你特別提到過這個),表值函數(和所有其他非函數的東西)不受這個「特性」的影響。

也可能是您在兩個模式中具有相同的函數名(也可以查看master數據庫中的函數)。也許你的「其他功能」是表值函數。

+0

感謝您的回答。正如我在之前的評論中所說的那樣,問題在於我的數據訪問組件。儘管如此,我非常感謝你的幫助。 – artie