【发布时间】:2010-02-19 09:20:28
【问题描述】:
问题:当我使用 SQL Server Management-Studio 创建表 (T_TableName) 时,它总是将表创建为
Domain\UserName.T_TableName
而不是
dbo.T_TableName
怎么了?
【问题讨论】:
标签: sql sql-server ssms
问题:当我使用 SQL Server Management-Studio 创建表 (T_TableName) 时,它总是将表创建为
Domain\UserName.T_TableName
而不是
dbo.T_TableName
怎么了?
【问题讨论】:
标签: sql sql-server ssms
如果您没有在要创建的表名上明确指定架构,它将在用户当前的默认架构中创建。
我敢打赌,您使用的用户将自己的个人架构设置为默认架构 - 这就是您的表在他自己的个人架构中创建的原因。
您可以通过检查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 就不必在不同的架构中寻找,因此也有助于提高性能。
【讨论】:
您需要将您的表创建为“dbo.Whatever”,或者您需要通过发出如下命令来更改您的默认架构(或让您的 SA 为您完成):
ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;
【讨论】:
在 SSMS 中将其称为 dbo.T_TableName。如果您拥有正确的权限,它将起作用。
【讨论】:
您是否为创建表的数据库分配了db_owner?如果没有,这可能是问题所在。尝试将您的用户映射权限添加到数据库中。
USE [yourDatabase]
GO
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
GO
【讨论】: