SQL Server接続文字列の「初期カタログ」のポイントは何ですか?


91

私が今まで見たすべてのSQLServer接続文字列は、次のようになります。

Data Source=MyLocalSqlServerInstance;Initial Catalog=My Nifty Database;
    Integrated Security=SSPI;

カタログの初期設定は必要ですか?(私が取り組んでいるアプリはそれがなくても動作するように見えるので、明らかにそうではありません。)

それでは、それは何のためですか?


31
うーん、アプリが作成したすべてのテーブルをマスターに配置していることを発見しました。おっと。私は自分の質問に対する答えを学んだばかりかもしれません。
ライアンランディ

回答:


53

接続文字列に含まれるユーザー名が複数のデータベースにアクセスできる場合は、接続文字列を接続するデータベースを指定する必要があります。ユーザーが使用できるデータベースが1つしかない場合は、それは問題ではありません。ただし、これを接続文字列に含めることをお勧めします。


10
完全に真実ではありません。ログインには、デフォルトデータベースに対する権限がない可能性があります。したがって、接続時にデータベースコンテキストを変更する必要があります
gbn 2009

これは、-ConnectionStringNameパラメーターを使用して指定する場合にEntity Frameworkに必要なので、間違いなく良い習慣ですが、必要な場合もあります。
James G

この答えを言い換えてもらえますか?2回読んでもまだわかりません。
thatWiseGuy

33

これは、接続時のデータソースの初期データベースです。

わかりやすくするために編集

SQL Serverインスタンスに複数のデータベースがあり、デフォルトのデータベースを使用したくない場合は、使用するデータベースを指定する方法が必要です。


1
最初の部分は正しいです。2番目の部分は正しくありません。アカウントを作成すると、初期カタログが指定されていない場合に使用されるデフォルトのデータベースが割り当てられます。これは通常、デフォルトでマスターになります(何らかの理由で)。
GrayWizardx 2009

私が「デフォルトで」と言うとき、私は単にあなたがあなたのオブジェクト名でデータベースを修飾していないときを意味します。いずれにせよ、私は自分の答えを明確にしました。
Andy West

私はアンディの説明が好きです。実際、彼のコメントは役に立ちます。それは私があればということを意味するものではありません、私のオブジェクト名内のすべてのデータベースを修飾し、初期カタログが重要/無関係なようではありませんか?
赤エンドウ豆

12

初期カタログを設定すると、その接続で実行されるクエリがデフォルトで使用するデータベースを設定できます。複数のデータベースが存在するサーバーへの接続にこれを設定しない場合、多くの場合、クエリを実行しようとしているデータベースを明示的に宣言するために、すべてのクエリにUSEステートメントが必要になります。初期カタログ設定は、デフォルトデータベースを明示的に宣言するための良い方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.