当我尝试创建表时,它使用我的 ID 作为架构名称。但是在我经理的计算机上创建表时,架构名称是“dbo”。为什么?他可能拥有管理员权限。当我尝试使用 sp_rename 重命名时,它没有改变。
在 SSMS 中,转到您的数据库用户并单击属性。您将在那里看到一个用于默认架构的字段。
T-SQL 版本:
alter user YourDbUser
with default_schema = YourNewSchema
Run Code Online (Sandbox Code Playgroud)
我希望我能在这里结合三个人的答案,因为答案真的分为三个部分,每个部分都回答得很好。所以我将其标记为社区维基。
您获得不同架构的原因dbo
是因为您的默认架构不是 dbo
,并且您正在编写:
CREATE TABLE foo(...);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,SQL Server 假定您要在默认架构中创建对象(毕竟这是拥有自定义默认架构的目的的一部分)。
要阻止这种情况发生,请在创建或引用对象时始终指定架构前缀。当你这样写语句时,SQL Server 是没有办法出错的:
CREATE TABLE dbo.foo(...);
CREATE TABLE your_schema.foo(...);
Run Code Online (Sandbox Code Playgroud)要移动在错误架构中意外创建的表,您可以使用ALTER SCHEMA
. 例如,如果您创建your_schema.foo
并希望在dbo
架构中使用它,您可以说:
IF NOT EXISTS
(
SELECT 1 FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name = N'foo'
AND s.name = N'dbo'
)
BEGIN
ALTER SCHEMA [dbo] TRANSFER your_schema.foo;
END
ELSE
BEGIN
PRINT 'Sorry, couldn''t move the object because it already exists.';
END
Run Code Online (Sandbox Code Playgroud)