回答:
SQL Server 2000のようにdboスキーマの使用に戻りたい場合は、テーブルをdboスキーマに戻すことができます。
ALTER SCHEMA dbo TRANSFER erpadmin.tablename;
非dboスキーマを使用する場合の別の方法は、ユーザーのデフォルトスキーマをに設定することです。スキーマをerpadmin
指定しない場合は、スキーマがデフォルトとして使用されます。(sysadmin固定サーバーロールのメンバーはを無視し、デフォルトDEFAULT_SCHEMA
で使用dbo
します。)
ALTER USER erpadmin WITH DEFAULT_SCHEMA = erpadmin;
ただし、2つの部分からなる名前(schema.table)を使用することをお勧めします。そのため、参照するテーブルを明示的に指定できます。一部の機能では2部構成の名前を使用する必要があります。インデックス付きビューはその一例です。
これは典型的な理由です データベースオブジェクトにアクセスするときにスキーマ名を指定する必要です。これが指定されておらず、デフォルト以外のスキーマのオブジェクトにアクセスしようとしている場合は、現在表示されている問題が発生します。
本当の修正は、アプリケーション(または現在問題となっているクエリエージェント)を明示的に変更することです。
クエリを作成するときは、「erpadmin」を含める必要があります。混乱を招くすべてのテーブル名の前。
これは紛らわしいことではなく、明示的な命名規則です。オブジェクトのシャッフルと不整合を避けるために、その命名法を守ることをお勧めします。
@AdamWengerの回答に加えて。スキーマに転送するためのスクリプトを作成するには、次のスクリプトを使用できます
select 'ALTER SCHEMA dbo TRANSFER '+s.name+'.'+t.name
from sys.schemas s
join sys.tables t on t.schema_id=s.schema_id
where s.name='erpadmin'
あなたの問題はおそらく移行がどのように行われたかによるものです。あなたが所有者であると見なされない限り、スタッフにユーザーに添付すべきではありません。
スキーマは、理にかなった方法でテーブルを分離するのに役立ちます。HR部門用のリソースのテーブルが1つあり、製造部門用に別のテーブルが必要で、両方を同じデータベースに保持しているとします。その場合、リソースという名前の2つのテーブルを1つは本番スキーマに、もう1つはHRスキーマに含めることができます。だから、デフォルトのスキーマにデータを入れない限り、スキーマを指定する必要があります。
他の理由で移行をやり直さない場合は、Adam Wengerの転送が賢明な選択肢になるはずです。
コマンドを開始します。USE [tablename]
クエリには参照するデータベースが関連付けられておらず、表示しているデータベースはログインしているユーザーのデフォルトではありません。クエリウィンドウの上部には、おそらく「マスター」と表示されています。
[database_name]
ですか?
select ... from table5 ;
)を実行して異なる結果が得られる状況を回避するためです。これは、プランのキャッシュとトラブルシューティングにも問題があります(キューサポート担当者、「このクエリはここで正常に実行されます」)。また、関数とビューのインデックス付けに必要なスキーマバインディングには、2つの部分名が必要です。TLDR:怠惰になるのをやめる-2つの部分名を使用します。