2009-08-13 36 views
1

最近SQL Server 2000データベースからSQL Server 2005データベースにデータベースをインポートしました。私は以前のデータベースで以前設定したものと同じログイン資格と所有者権限であると思ったものを設定しました。ストアドプロシージャエラーが見つかりません

私が作業しているすべてのコードベースには、ストアドプロシージャ名で単純にリストされたプロシージャが格納されています。

適切なログインが作成されていることを確認するために、アプリケーションで使用している接続情報(SQL Server Management Studioのユーザー名「licensemgr」とそれに関連付けられているパスワード)を使用してログインしています。私はすべてのテーブル、ストアドプロシージャなどを見ることができます...私は組み合わせてログインすると私のデータベースに。ストアドプロシージャを実行しようとすると、SQL Server Management Studioは次の構文を使用して実行します。

EXEC: @return_value = [licensemgr].[Stored_Procedure_Name] 

これはエラーなく実行されます。

[licensemgr]を削除しようとした場合。 [Stored_Procedure_Name]の前から、「ストアドプロシージャが見つかりません:Stored_Procedure_Name」というエラーが表示されます。これは、このデータベースからアプリケーションを実行しているときと同じエラーです。アプリケーションのストアドプロシージャ呼び出しを「licensemgr」に変更しました。ストアドプロシージャ名の前に、問題を修正するように見えましたが、アプリケーション内のストアドプロシージャコールごとにその処理を行いたくありません。したがって、どのタイプのセットアップ/アクセス許可の種類の問題が私のSQL Serverインスタンスに存在しない可能性がありますので、データベースにlicensemgrとしてログインしても、スキーマ「licensemgr」にあるストアドプロシージャは表示されません。

答えて

1

SQL Server 2000では、[licensemgr]がテーブルの所有者を参照しました。したがって、[licensemgr]としてログインしている場合は、プレフィックスは必要ありません。

SQL Server 2005では、これはスキーマに変更されているため、指定する必要があります。参照:

http://msdn.microsoft.com/en-us/library/ms190387.aspx

EDIT

あなたが注意する必要がある2つのものがあります:ユーザーがsysadminロールである場合

  • が、彼は常にDBOにデフォルト設定されますスキーマであるため、プレフィックスを付ける必要があります。
  • 異なるスキーマにあるコードを実行する必要がある場合は、接頭辞

ユーザーの既定のスキーマを設定して上記2つのいずれも機能しない場合

+0

SQL Server 2005では、スキーマ名と所有権が分離されているため、ストアドプロシージャごとにスキーマ名を指定する必要があるということを明確にしています。 これは私のコードを変更するのに気になりませんが、私はちょうど私があなたを正しく理解していることを確認したいと思っています。 – Kivus

1

ユーザーを作成したときに、DEFAULT_SCHEMAを指定しましたか?

CREATE USER ... WITH DEFAULT_SCHEMA = "licensemgr" 

ない場合は、新しいシステムでのユーザーのためにこれを修正するためにALTER USERを使用する必要があります。

+0

SQL Server Management Studioを使用してユーザーを作成し、既定のスキーマをlicensemgrに設定しました。だから私はここで良いと思う。 – Kivus

関連する問題