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

Posted

技术标签:

【中文标题】SQL Server 创建错误的表名,为啥?【英文标题】:SQL Server creating wrong table names, why?SQL Server 创建错误的表名,为什么? 【发布时间】:2010-02-19 09:20:28 【问题描述】:

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

Domain\UserName.T_TableName

而不是

dbo.T_TableName

怎么了?

【问题讨论】:

【参考方案1】:

如果您没有在要创建的表名上明确指定架构,它将在用户当前的默认架构中创建。

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

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

SELECT name, type_desc, default_schema_name
FROM sys.database_principals

解决这个问题:

明确指定要使用的架构(无论如何都是最佳实践!)

CREATE TABLE dbo.T_TableName

将用户的默认架构更改为dbo

ALTER USER [Domain\YourUser] WITH DEFAULT_SCHEMA = dbo

但作为一般经验法则,我建议始终使用“dbo”。显式前缀,如果您想在 dbo 模式中拥有所有数据库对象。如果您明确告诉它您的数据库对象所在的位置,SQL Server 就不必在不同的架构中寻找,因此也有助于提高性能。

【讨论】:

【参考方案2】:

您需要将您的表创建为“dbo.Whatever”,或者您需要通过发出如下命令来更改您的默认架构(或让您的 SA 为您完成):

ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;

【讨论】:

【参考方案3】:

在 SSMS 中将其称为 dbo.T_TableName。如果您拥有正确的权限,它将起作用。

【讨论】:

【参考方案4】:

您是否为创建表的数据库分配了db_owner?如果没有,这可能是问题所在。尝试将您的用户映射权限添加到数据库中。

USE [yourDatabase]
GO
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
GO

【讨论】:

以上是关于SQL Server 创建错误的表名,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中创建架构,架构是干啥用的,为啥要创建架构,有啥好处?

sql server2008怎么实现查询某个数据库中所有的表名

使用 c# 创建新的 sql server 表

SQL Server如何查找表名或列名中包含空格的表和列

sql server存储过程如何动态生成表名

sql server2008如何查询在指定的数据库中所有的表名和每个表的字段名及字段类型