SQL Server 用户的设置之一是DEFAULT_SCHEMA
. 这经常发生dbo
,但并非总是如此。我意识到您可以使用以下代码更改设置:
ALTER USER [UserName] WITH DEFAULT_SCHEMA = [SchemaName]
据我所知,每当我创建 aUSER
并且不指定DEFAULT_SCHEMA
它使用的 a 时dbo
。但我仍然发现USERS
它具有不同的默认架构。
如果我没记错的话,当您有一个从 SQL 2000 升级的实例时,默认架构是与用户名匹配的架构。我猜这就是我所看到的大部分(如果不是全部)的来源。
有没有其他方法可以在USER
不指定的情况下创建 aDEFAULT_SCHEMA
并使用除 之外的其他内容创建它dbo
?
注意:这适用于 SQL Server 2005 及更高版本。
发生这种情况的一种方法是让具有
CONTROL SERVER
服务器级别权限的登录名(因此不需要实际USER
才能访问数据库)但不是sysadmin
固定服务器角色(因为这样有一个隐含的默认模式dbo
)创建一个没有明确指定要放入的模式的对象。根据CREATE SCHEMA的 MSDN 页面:
因此,我说的是上面提到的第一种情况,@Max 的回答是关于第二种情况。
以下是第一种情况的示例(请注意,以下示例使用
tempdb
,因为每个实例都有,但我确实在非tempdb
数据库上进行了测试)。要查看第二种情况的示例,请参阅@Max 的答案(此处无需复制)。作为 Windows 组成员且有权通过该 Windows 组访问 SQL Server 数据库的用户的架构将自动成为该用户的名称。
为了测试这一点,我刚刚在我的本地机器上创建了一个名为“TestGroup”的组。我向该组添加了一个 Windows 用户“TestUser”。然后,我在本地实例上执行了以下操作:
然后我以“TestUser”的身份启动 SSMS,并登录到本地实例。然后我运行了以下命令:
结果: