📅  最后修改于: 2023-12-03 14:52:34.839000             🧑  作者: Mango
在 SQL Server 中,dbo
是默认的数据库模式,也就是默认的数据库拥有者。如果在创建数据库对象时没有显示地指定模式,那么这些对象就会被存储在 dbo
模式中。
下面来介绍如何将数据库中的对象从其他模式更改为 dbo
模式。
查询数据库中的对象所在的模式,可以使用以下命令:
SELECT schema_name(schema_id) AS schema_name, name AS object_name, type_desc
FROM sys.objects
WHERE schema_id != schema_id('dbo')
ORDER BY schema_name, object_name;
输出结果应该类似于下面的样子:
| schema_name | object_name | type_desc | | ----------- | ----------- | --------- | | sales | orders | USER_TABLE | | sales | products | USER_TABLE | | support | tickets | USER_TABLE |
可以看到,在当前数据库中,存在三个对象(orders、products 和 tickets)不在 dbo
模式中。
将对象转移到 dbo
模式。可以使用 ALTER SCHEMA
命令完成此操作。请注意,需要带上对象所在的当前模式名称。
ALTER SCHEMA dbo TRANSFER sales.products;
ALTER SCHEMA dbo TRANSFER sales.orders;
ALTER SCHEMA dbo TRANSFER support.tickets;
每条语句都会将一个对象转移到 dbo
模式中。
再次运行第 1 步中的查询语句,可以看到所有对象现在都在 dbo
模式中了。
| schema_name | object_name | type_desc | | ----------- | ----------- | --------- | | dbo | orders | USER_TABLE | | dbo | products | USER_TABLE | | dbo | tickets | USER_TABLE |
这就是将数据库中对象从其他模式更改为 dbo
模式的方法。使用 ALTER SCHEMA
命令可以将一个或多个对象全部转移。请注意,该操作不会影响对象本身的定义,只是将其移动到另一个模式中。
从其他模式更改对象到 dbo
模式很容易。只需按照上述步骤执行即可。最好在执行此操作之前对数据库进行备份,以防止出现意外问题。
print('```sql')
print('SELECT schema_name(schema_id) AS schema_name, name AS object_name, type_desc')
print('FROM sys.objects')
print('WHERE schema_id != schema_id(\'dbo\')')
print('ORDER BY schema_name, object_name;')
print('```')
print('```sql')
print('ALTER SCHEMA dbo TRANSFER sales.products;')
print('ALTER SCHEMA dbo TRANSFER sales.orders;')
print('ALTER SCHEMA dbo TRANSFER support.tickets;')
print('```')