web-dev-qa-db-ja.com

SQLサーバースキーマとデフォルトスキーマ

データベースにスキーマを定義しています。今を除き、SQLステートメントを実行するたびに、スキーマを提供する必要があります... SELECT * FROM [myschema].table

Management Studioを使用してユーザーのデフォルトスキーマを設定し、ALTER USER myUser WITH DEFAULT_SCHEMA [myschema]も実行しましたが、スキーマなしでクエリを作成するときに無効なオブジェクト 'table'を取得します(SELECT * FROMテーブル)

常にスキーマ名を指定せずにSELECT * FROM tableを記述する方法はありますか?

SQL Management Studioを使用したSQL 2005上にあります。

31
pdiddy

documentationSAによると、ユーザーはSAであり、そうでない場合は常にdboスキーマにデフォルト設定されます。

ユーザーがsysadmin固定サーバーロールのメンバーである場合、DEFAULT_SCHEMAの値は無視されます。 sysadmin固定サーバーロールのすべてのメンバーには、dboのデフォルトスキーマがあります。

48
Dustin Laine

いくつかのオプション:

  1. ユーザーが[セキュリティ]> [ユーザー(SSMS内)]に表示されていますか? Properties(名前を右クリック)を確認し、Default schemaインスタンスではなく、データベースのコンテキストで設定されます(ALTER USERが設定するものです)。
  2. シノニムを作成 参照するテーブルの場合:

    CREATE SYNONYM table_name  
       FOR [your_db].[your_schema].table_name
    

    ...そのデータベースのコンテキストで、少なくとも2つの名前表記を使用していないすべての人に影響します。 詳細はこちら 。ただし、最終的にはスキーマに関連付けられます。

  3. [利用可能なデータベース]ドロップダウン(左上、[実行]ボタンの左側)で選択したデータベースが正しいことを確認します。

  4. テーブル(およびビュー)参照を指定するときは、3つの名前表記法を使用します。

    SELECT * 
      FROM [your_db].[your_schema].table_name
    
4
OMG Ponies