Qual é o ponto de “Catálogo inicial” em uma string de conexão do SQL Server?

90

Cada string de conexão do SQL Server que já vi se parece com isto:

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

Eu preciso da configuração do Catálogo Inicial? (Aparentemente não, já que o aplicativo em que estou trabalhando parece funcionar sem ele.)

Bem, então, para que serve?

Ryan Lundy
fonte
31
Hmmm, acabei de descobrir que meu aplicativo colocou todas as minhas tabelas criadas no mestre. Opa. Posso ter acabado de saber a resposta à minha pergunta.
Ryan Lundy

Respostas:

52

Se o nome de usuário que está na string de conexão tiver acesso a mais de um banco de dados, você deverá especificar o banco de dados ao qual deseja que a string de conexão se conecte. Se o seu usuário tiver apenas um banco de dados disponível, você está correto ao dizer que não importa. Mas é uma boa prática colocar isso em sua string de conexão.

Avitus
fonte
9
Não é bem verdade. O login pode não ter permissões no banco de dados padrão. Portanto, você precisa alterar o contexto do banco de dados na conexão
gbn
Isso é necessário para o Entity Framework se você especificar o uso do parâmetro -ConnectionStringName, então definitivamente uma boa prática, mas também às vezes necessário!
James G
Você pode, por favor, reformular esta resposta? Ainda não entendo depois de ler duas vezes.
thatWiseGuy
33

Este é o banco de dados inicial da fonte de dados quando você se conecta.

Editado para maior clareza :

Se você tiver vários bancos de dados em sua instância do SQL Server e não quiser usar o banco de dados padrão, precisará especificar qual deles será usado.

Andy West
fonte
1
A primeira parte está correta. A segunda parte não está correta. Quando você cria a conta, é atribuído um banco de dados padrão que será usado se o catálogo inicial não for especificado. Geralmente, o padrão é master (por algum motivo desconhecido).
GrayWizardx
Quando digo "por padrão", quero dizer simplesmente quando você não está qualificando o banco de dados em seus nomes de objeto. Em todo caso, esclareci minha resposta.
Andy West
12

Definir um catálogo inicial permite definir o banco de dados que as consultas executadas nessa conexão usarão por padrão. Se você não definir isso para uma conexão a um servidor no qual vários bancos de dados estão presentes, em muitos casos, você precisará ter uma instrução USE em cada consulta para declarar explicitamente em qual banco de dados você está tentando executar a consulta. A configuração do Catálogo inicial é uma boa maneira de declarar explicitamente um banco de dados padrão.

jliles
fonte