web-dev-qa-db-ja.com

SQLクエリのデフォルトスキーマを設定する

クエリのスキーマを設定して、クエリの残りの部分でスキーマ名を前に付けずに名前だけでテーブルを参照できるようにする方法はありますか?

例えば、私はこのようなことをしたいと思います:

Use [schemaName]
select * from [tableName]

これとは対照的に:

select * from [schemaName].[tableName]
57
Chev

簡単なグーグルが このページ を示してくれました。 SQL Server 2005以降では、ALTER USERステートメントを使用してユーザーのデフォルトスキーマを設定できることが説明されています。残念ながら、それは永続的に変更することを意味するため、スキーマを切り替える必要がある場合は、ストアドプロシージャまたはステートメントのバッチを実行するたびに設定する必要があります。または、 here で説明されている手法を使用することもできます。

SQL Server 2000以前を使用している場合 このページ は、ユーザーとスキーマが同等であることを説明しています。 schema\userをテーブル名の先頭に追加しない場合、sqlサーバーはまず現在のユーザーが所有するテーブルを調べ、次にdboが所有するテーブルを見てテーブル名を解決します。他のすべてのテーブルでは、schema\userを先頭に追加する必要があるようです。

36
Sem Vanmeenen

これを行う「クエリごと」の方法があるとは思わない。 (useキーワードを使用して、データベース-スキーマではなく-を指定できますが、それは後でgoコマンドを発行する必要があるため、技術的には別個のクエリです。)

SQLサーバーでは、完全修飾テーブル名の形式は次のとおりです。

[データベース]。[スキーマ]。[テーブル]

SQL Server Management Studioでは、必要なすべての既定値を構成できます。

  • デフォルトのdatabaseをユーザーごとに(または接続文字列で)設定できます:

    セキュリティ>ログイン>(右クリック)ユーザー>プロパティ>一般

  • ユーザーごとにデフォルトのschemaを設定できます(ただし、常にデフォルトであるdboを使用する場合でも、接続文字列で設定できるとは思いません):

    セキュリティ>ログイン>(右クリック)ユーザー>プロパティ>ユーザーマッピング>デフォルトスキーマ

要するに、スキーマにdboを使用すると、頭痛の種が最も少なくなるでしょう。

15
mpontillo

多くのテーブル名が必要なときに時々行うことは、INFORMATION_SCHEMAシステムテーブルからそれらとスキーマを取得するだけです。


select  TABLE_SCHEMA + '.' + TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME in
(*select your table names*)

1
olafk

SETUSERは、必要に応じてデフォルトのスキーマを使用して、DB内のユーザー、さらにはオーフェンされたユーザーでも、機能します。しかし、SETUSERは、これまでのリストではサポートされていないレガシーにあります。したがって、同様の代替手段は、クロスDBアクセスが必要でない限り、必要なデフォルトスキーマでアプリケーションロールを設定することです。

1
Moogaloo

非常に古い質問ですが、グーグルが私をここに導いてくれたので、私は便利だと思う解決策を追加します:

手順1.使用できるようにする必要がある各スキーマのユーザーを作成します。例えば。 「user_myschema」

手順2. EXECUTE ASを使用して、必要なスキーマユーザーとしてSQLステートメントを実行します。

ステップ3. REVERTを使用して、元のユーザーに切り替えます。

例:スキーマ「otherschema」に存在するテーブル「mytable」があり、これがデフォルトのスキーマではないとします。 「SELECT * FROM mytable」を実行しても機能しません。

「user_otherschema」という名前のユーザーを作成し、そのユーザーのデフォルトスキーマを「otherschema」に設定します。

これで、このスクリプトを実行してテーブルと対話できます。

EXECUTE AS USER = 'user_otherschema';
SELECT * FROM mytable
REVERT

復帰ステートメントは現在のユーザーをリセットするので、あなたは再びあなた自身です。

EXECUTE ASドキュメントへのリンク: https://docs.Microsoft.com/en-us/sql/t-sql/statements/execute-as-transact-sql?view=sql-server-2017

0
Culme