我将一堆表从旧的sql服务器(2000)导入到2008年的数据库中。所有导入的表都以我的用户名为前缀,例如:jonathan.MovieData
。在表properties
中,它将jonathan
列为db模式。当我编写存储过程时,我现在必须在所有表名前面包含jonathan.
,这很令人困惑。
如何将我所有的表都改为dbo而不是jonathan?
当前结果:jonathan.MovieData
期望的结果:dbo.MovieData
发布于 2009-07-18 03:31:07
您可以运行以下命令,这将为您的所有数据库生成一组ALTER sCHEMA语句:
SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'
然后,您必须在查询分析器中复制并运行这些语句。
这里有一个较旧的脚本,我想它也可以通过更改对象所有者来实现这一点。不过,我还没有在2008年尝试过。
DECLARE @old sysname, @new sysname, @sql varchar(1000)
SELECT
@old = 'jonathan'
, @new = 'dbo'
, @sql = '
IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
WHERE
QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
AND TABLE_SCHEMA = ''' + @old + '''
)
EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''
EXECUTE sp_MSforeachtable @sql
从this site那里拿到的。
如果需要的话,它还讨论了如何对存储过程执行相同的操作。
发布于 2009-07-18 03:30:26
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
参考:ALTER SCHEMA
发布于 2013-12-03 21:22:15
您可以批量更改多个数据库对象的模式,如本文所述:
How to change schema of all tables, views and stored procedures in MSSQL
https://stackoverflow.com/questions/1146599
复制相似问题