0

データベースを SQL Server 2000 から SQL Server 2008 R2 に移行していて、スキーマに問題が発生しました。SELECT * FROM blahSQL Server 2000 では、オブジェクト名の前に (たとえばではなく)所有者/スキーマを付けなかった場合でも、dbo.blahSQL Server はそれを認識します。これは、オブジェクトが非 dbo 所有者にある場合でも機能しました。

SQL Server 2005 では、これは次のように変更されました: http://blogs.msdn.com/b/mssqlisv/archive/2007/03/23/upgrading-to-sql-server-2005-and-default-schema-setting .aspx .

ユーザーの既定のスキーマを dbo ではなく xyz にすることで、2 つのスキーマを持つデータベースを回避できます。私が遭遇する問題は、3 番目のスキーマ (abc.blah) があるデータベースにあります。ユーザーをデフォルトの xyz にすると、問題なく dbo にアクセスできますが、スキーマ プレフィックスなしで abc から何かを選択しようとすると、無効なオブジェクト エラーが発生します (abc.blah は正常に動作します)。

もちろん、最初からこのようにコーディングするべきではありませんでしたが、それは別の戦いです。アクセス許可に問題がないことを確認しました。

私は他の人がこれに遭遇したと確信しています。コードを修正する以外の回避策を見つけた人はいますか?

4

1 に答える 1

2

ここには多くの魔法はありません。コードを修正します。

両方のスキーマに同じ名前のオブジェクトがないと仮定すると、次のような多数の同義語を作成できる場合があります。

CREATE SYNONYM xyz.foo FOR dbo.foo;

...しかし、それはコードを修正するのと同じくらい混乱するでしょう。

于 2013-02-19T22:57:51.233 に答える