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 中创建架构,架构是干啥用的,为啥要创建架构,有啥好处?