SQL Server连接字符串中的"Initial Catalog"是什么意思?

102

我所见过的每个 SQL Server 连接字符串都长成这样:

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

我需要设置“Initial Catalog”吗?(似乎不需要,因为我正在处理的应用程序似乎没有使用它。)

那么,这个设置有什么作用呢?


35
哦,我刚刚发现我的应用程序把我创建的所有表都放在了主数据库中。糟糕。我可能刚刚找到了我的问题的答案。 - Ryan Lundy
3个回答

63

如果连接字符串中的用户名可以访问多个数据库,您必须指定要连接到的数据库。 如果您的用户只有一个可用的数据库,则无关紧要。但在连接字符串中加入这一项是一个好习惯。


13
并不完全正确。登录账户可能没有默认数据库的权限。因此,在连接时需要更改数据库上下文。 - gbn
如果您使用-ConnectionStringName参数指定,则Entity Framework需要这个。因此,这是绝对的良好实践,有时也是必需的! - James G
你能否请重新措辞这个答案?我读了两遍后仍然不理解。 - thatWiseGuy

36
这是连接时数据源的初始数据库为了更明确,已经进行了编辑:

如果你在SQL Server实例中有多个数据库,并且不想使用默认数据库,则需要一些方法来指定要使用的数据库。


1
第一部分是正确的。第二部分不正确。当您创建帐户时,它会被分配一个默认数据库,如果未指定初始目录,则将使用该数据库。通常情况下,默认为主数据库(原因不明)。 - GrayWizardx
当我说“默认情况下”时,我只是指当您没有在对象名称中限定数据库时。无论如何,我已经澄清了我的答案。 - Andy West
我喜欢安迪的澄清,事实上他的评论很有帮助;这难道不意味着如果我在对象名称中确实限定了每个数据库,那么Initial Catalog就不那么重要/无关紧要了吗? - Nate Anderson

17

设置初始目录可以使查询运行的连接默认使用的数据库。如果您未为连接服务器设置此项,并且该服务器中存在多个数据库,则在许多情况下,您需要在每个查询中使用 USE 语句来明确声明要运行查询的数据库。初始目录设置是显式声明默认数据库的好方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接