あなたはSQL Serverの中で次のように実行した場合... スキーマのルックアップ(バグ?)
CREATE SCHEMA [cp]
GO
CREATE TABLE [cp].[TestIt](
[ID] [int] NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE cp.ProcSub
AS
BEGIN
Print 'Proc Sub'
END
GO
CREATE PROCEDURE cp.ProcMain
AS
BEGIN
Print 'Proc Main'
EXEC ProcSub
END
GO
CREATE PROCEDURE cp.ProcMain2
AS
BEGIN
Print 'Proc Main2'
SELECT * FROM TestIt
END
GO
exec cp.ProcMain2
GO
exec cp.ProcMain
GO
は、あなたがエラーを取得する
ストアドプロシージャ「ProcSubが見つかりませんでした'
実行コールにスキーマをハードコードしないで、プロシージャをスキーマにコンパイルすることは不可能です。これは、設計上またはバグで、プロシージャー・スキーマ内の表を最初に選択することです。
私はそれを聞いてみたいと思っていますが、開発者にお互いを呼び出す2つのストアドプロシージャを与えることができます。同じデータベース内の別のスキーマのオブジェクトを参照するユーティリティであるために実行できます。
シノニムでラウンドさせることができるかどうかを確認しましたが、同じ問題が発生しているようです。
スキーマを作成した後、CPにユーザーのデフォルトのスキーマを変更しましたか?実行中、コンテキストはユーザのデフォルトスキーマから取得されます。この場合、あなたはまだdboとして設定されています。つまり、このエラーをgettignする理由です。ですから、 "exec cp.prodsub"を使用するか、またはユーザーを更新してください。 –
それは要点ですが、私はユーザーのデフォルトのスキーマを変更したくありません。これらは、異なるスキーマ内の異なるセットのオブジェクトである必要があります。異なるスキーマ内のテーブルと同じように動作する必要があります。 – Hoots
あなたがユーザーを持っている場合、「cp」スキーマにアクセスできるJayeshと言えば、宣言の直後にEXECUTE AS Jayeshを試してこの問題を解決することができます。しかし、もちろん、なりすましを許可する必要があります。それについての詳細とDBAがそれを使用する前に配置した特定の制限事項については、DBAに相談してください。参照 - https://msdn.microsoft.com/en-us/library/ms181362.aspx –