まず、他のサーバーからデータベースを復元しました。これで、すべてのストアド プロシージャの名前が [azamsharp].[usp_getlatestposts] になりました。[azamsharp] は元のサーバー上のユーザーだったのでプレフィックスが付けられていると思います。
現在、私のローカル マシンでは、これは実行されません。すべてのストアド プロシージャに [azamsharp] プレフィックスを付けたくありません。
また、ストアドプロシージャを右クリックしても、プロパティ オプションが表示されません。Windows 7 で SQL Server 2005 を実行しています。
アップデート:
孤立したユーザーのストアド プロシージャを実行すると、2 人のユーザー「azamsharp」と「dbo1」が表示されました。「azamsharp」ユーザーは修正しましたが、「dbo1」は修正されません。次のスクリプトを実行すると:
exec sp_change_users_login 'update_one', 'dbo1', 'dbo1'
次のエラーが発生します:
メッセージ 15291、レベル 16、状態 1、プロシージャ sp_change_users_login、行 131 このプロシージャを終了します。ログイン名 'dbo1' が存在しないか無効です。
答え1
バックアップ/復元による復元では、データベース内のオブジェクトの名前が変更されることはありません。データベースの復元の結果は、バックアップされたのと同じデータベースになります。復元されたデータベースでプロシージャの名前が [schema].[object] になっている場合、古いサーバーでもまったく同じ名前になっていることを保証します。
おそらく、古いサーバーではログインしたユーザーに暗黙的なスキーマが関連付けられていることに気付かず、select from table
またはのようなステートメントを発行すると、execute usp_foo
自動的にデフォルトのスキーマにバインドされたことが原因です。
古いサーバーの管理者に確認して、システムで使用していた権限とデフォルトを教えてもらい、新しいサーバーの管理者に同じ権限とデフォルトを復元するよう依頼する必要があります。