問:當我創建使用SQL Server Management-Studio中的一個表(T_TableName
),它總是創建表作爲SQL Server創建錯誤的表名,爲什麼?
Domain\UserName.T_TableName
,而不是
dbo.T_TableName
有什麼不對?
問:當我創建使用SQL Server Management-Studio中的一個表(T_TableName
),它總是創建表作爲SQL Server創建錯誤的表名,爲什麼?
Domain\UserName.T_TableName
,而不是
dbo.T_TableName
有什麼不對?
如果您沒有在要創建的表名上明確指定模式,則會使用用戶當前的默認模式創建該模式。
我敢打賭,你正在使用的用戶有其自己的個人模式集作爲其默認模式 - 這就是爲什麼你的表創建自己的個人模式。
你可以檢查你有什麼數據庫用戶,以及他們的默認模式是通過檢查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將不必去尋找不同的模式,從而有助於提高性能。
在SSMS中調用dbo.T_TableName。如果您擁有正確的權限,它將起作用。
對於創建該表的數據庫,您被分配爲db_owner
嗎?如果不是,這可能是問題。嘗試將您的用戶映射權限添加到數據庫中。
USE [yourDatabase]
GO
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
GO
你需要或者創建表爲「dbo.Whatever」,或者你需要通過發出命令像更改默認模式(或你的SA爲你做):
ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;