SQL Server创建错误的表名,为什么?

Ste*_*ger 8 sql sql-server ssms

问题:当我T_TableName使用SQL Server Management-Studio 创建表()时,它始终将表创建为

Domain\UserName.T_TableName
Run Code Online (Sandbox Code Playgroud)

代替

dbo.T_TableName
Run Code Online (Sandbox Code Playgroud)

怎么了 ?

mar*_*c_s 10

如果未在要创建的表名上明确指定架构,则将在用户的当前默认架构中创建该架构.

我敢打赌,您正在使用的用户将自己的个人架构设置为其默认架构 - 这就是为什么您的表在他自己的个人架构中创建的原因.

您可以通过检查sys.database_principals(SQL Server 2005及更高版本)来检查您拥有的数据库用户以及他们的默认架构:

SELECT name, type_desc, default_schema_name
FROM sys.database_principals
Run Code Online (Sandbox Code Playgroud)

要解决这个问题:

但作为一般经验法则,我建议始终使用"dbo".如果要在dbo架构中拥有所有数据库对象,则显式前缀.如果你明确地告诉它你的数据库对象存在的位置,SQL Server也不必在不同的模式中寻找,那么也有助于提高性能(如此轻微).