1

を使用して定義された別のDBのテーブルの同義語があります

create synonym TableA for otherDb.dbo.TableA

ローカルに定義されたストアドプロシージャがあります

CREATE PROCEDURE dbo.spGetTableA
AS 
BEGIN
SELECT * FROM TableA
END

今私がSPを呼ぶとき

EXEC spGetTableA

次のエラーが発生します
無効なオブジェクト名'TableA'

SQLを直接呼び出すと、SELECT * FROM TableA
完全に機能します。

これが機能するために私が欠けているものはありますか?

4

1 に答える 1

3

デフォルトのスキーマがdboではないユーザーからストアドプロシージャを呼び出している可能性があります。したがって、シノニムを作成するときとクエリでテーブルを参照するときの両方で、常にスキーマを参照する必要があります。

DROP SYNONYM TableA;
GO
CREATE SYNONYM dbo.TableA FOR OtherDB.dbo.TableA;
GO
ALTER PROCEDURE dbo.spGetTableA
AS
BEGIN
  SELECT * FROM dbo.TableA;
END
GO
EXEC dbo.spGetTableA;

dbo.コード内のこれらすべての参照を太字にできたらいいのにと思います。それらは重要であり、常にそこにあるべきです

読んでください:

于 2013-01-16T20:41:36.840 に答える