SQL Server 2005からスキーマという概念が導入されました。
例えばテーブルを示す完全修飾名は、サーバ名.データベース名.スキーマ名.テーブル名となり、テーブル名の前にスキーマ名が入ります。
スキーマを作成・指定しなければ既定のスキーマはdboとなります。
スキーマを変更したテーブルにODBC経由でアクセスするためには、スキーマ名.テーブル名でアクセスしなければなりませんが、データベースのユーザに既定のスキーマを指定すれば、テーブル名だけでアクセスが可能になります。(サーバ名.データベース名はODBCのデータソースで解決している)
ですが、既定のスキーマを指定したにもかかわらず、既定のスキーマに属するテーブルにアクセスできないことがあります。
MSDNによると、
ユーザーが固定サーバー ロール sysadmin のメンバである場合、DEFAULT_SCHEMA の値は無視されます。固定サーバー ロール sysadmin のすべてのメンバには、dbo の既定のスキーマが割り当てられます。
つまり、ログインにsysadminのサーバーロールをつけると、既定のスキーマではなくdboが使われるということで、既定のスキーマは無視されるということです。
CREATE TABLEなどはできなくなりますが、sysadminは外しておくのがよいようです。
sa said
まさにこの現象に、1週間近く悩まされていました。
sysadminだと、スキーマが使えないとは・・・
本当に助かりました。どうもありがとうございました。
感謝してもしきれません。
通りすがり said
とても良い情報です。
SQLServer2019 でも同じ動きのままです。
sys からテーブル一覧とか取得したいのに使えないのか・・・
n said
助かりました