5

アプリケーションを開発するために、Borland Delphi で SQL Server 2008 を使用しています。最近、非常に奇妙なエラーが発生しています。アプリケーションで使用するいくつかのスカラー関数を作成しましたが、顧客に問題があります。彼の会社では、スカラー関数を呼び出すと、ソフトウェアが次のエラーを返します。

列「dbo」またはユーザー定義関数または集計「dbo.FunctionName」が見つからないか、名前があいまいです。」

ここでも、すでに多くの検索を行っているので、次の点に注意してください。

  1. 関数が存在します。

  2. 正しいデータベースを照会しています。

  3. タイプミスはありません。

  4. 所有者のスキーマはdbo;

  5. この問題は ALL MY FUNCTIONS で発生します。

    そして、最も奇妙な...

  6. アプリケーションからそれらを呼び出した場合にのみ発生します。同じユーザーを使用してクエリ アナライザーでまったく同じコードを実行すると、正常に実行されます。

私は他のいくつかの顧客でこれと同じ機能を持っていますが、問題はありません。SQL Server の問題でしょうか?

PS: 英語が下手で申し訳ありません。最初の質問はこちらです。

4

1 に答える 1

3

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

次に、「そのような機能はありません」が表示されます。
これはスカラー関数でのみ発生します。(具体的にこれについて言及しました)、テーブル値関数(および他のすべての非関数のもの)は、この「機能」の影響を受けません。

また、2 つのスキーマで同じ関数名を使用している可能性もあります (マスター データベースの関数も参照してください)。おそらく、「その他の関数」はテーブル値関数です。

于 2013-06-29T15:29:42.617 に答える