如何将db模式更改为dbo

我从旧的SQL Server(2000)导入了一堆表到我的2008数据库。 所有导入的表都以我的用户名作为前缀,例如: jonathan.MovieData 。 在表格properties它将jonathan列为数据库模式。 当我编写存储过程时,我现在必须包含jonathan. 在所有令人困惑的表名前面。

我如何将所有的表格改为dbo而不是jonathan?

当前结果: jonathan.MovieData

dbo.MovieData结果: dbo.MovieData

 ALTER SCHEMA dbo TRANSFER jonathan.MovieData; 

请参阅ALTER SCHEMA 。

通用语法:

 ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 

您可以运行以下命令,它将为您的所有数据生成一组ALTER sCHEMA语句:

 SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan' 

然后您必须在查询分析器中复制并运行这些语句。

这是一个较老的脚本,也可以为你做,我想通过改变对象的所有者。 尽pipe如此,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 

从这个网站得到它。

它也谈到如果你需要做同样的存储过程。

 USE MyDB; GO ALTER SCHEMA dbo TRANSFER jonathan.MovieData; GO 

参考: ALTER SCHEMA

将表从dbo架构移动到MySchema:

  ALTER SCHEMA MySchema TRANSFER dbo.MyTable 

将表从MySchema移动到dbo架构:

  ALTER SCHEMA dbo TRANSFER MySchema.MyTable 

我刚刚发布到一个类似的问题: 在SQL Server 2005中,如何更改表的“架构”,而不会丢失任何数据?


sAeid的优秀答案略有改善…

我添加了一个exec来让这个代码自动执行,并且我在顶部添加了一个联合,以便我可以更改表和存储过程的模式:

 DECLARE cursore CURSOR FOR select specific_schema as 'schema', specific_name AS 'name' FROM INFORMATION_SCHEMA.routines WHERE specific_schema <> 'dbo' UNION ALL SELECT TABLE_SCHEMA AS 'schema', TABLE_NAME AS 'name' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA <> 'dbo' DECLARE @schema sysname, @tab sysname, @sql varchar(500) OPEN cursore FETCH NEXT FROM cursore INTO @schema, @tab WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER SCHEMA dbo TRANSFER [' + @schema + '].[' + @tab +']' PRINT @sql exec (@sql) FETCH NEXT FROM cursore INTO @schema, @tab END CLOSE cursore DEALLOCATE cursore 

我也必须恢复dbdump,并发现架构不是dbo – 我花了几个小时试图让Sql Serverpipe理工作室或Visual Studio的数据传输来改变目的地模式…我结束了刚刚运行这个对恢复转储到新服务器上,以便按照我想要的方式获取内容。

您可以批量更改多个数据库对象的模式,如本文所述:

如何在MSSQL中更改所有表,视图和存储过程的模式

为个人做事的方法:

改变模式dbo转移jonathan.MovieData

我有一个类似的问题,但我的架构有一个反斜杠。 在这种情况下,在模式中包括括号。

 ALTER SCHEMA dbo TRANSFER [DOMAIN\jonathan].MovieData; 

MS-帮助://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm

ALTER SCHEMA schema_name TRANSFER securable_name

打开SQL服务器作为SA帐户,并点击新的查询过去的打击查询

比单击执行,它将所有拥有的架构回滚到SA帐户

 alter authorization on schema::[db_datareader] to [dbo] alter authorization on schema::[db_datareader] to [db_datareader] alter authorization on schema::[db_datawriter] to [dbo] alter authorization on schema::[db_datawriter] to [db_datawriter] alter authorization on schema::[db_securityadmin] to [dbo] alter authorization on schema::[db_securityadmin] to [db_securityadmin] alter authorization on schema::[db_accessadmin] to [dbo] alter authorization on schema::[db_accessadmin] to [db_accessadmin] alter authorization on schema::[db_backupoperator] to [dbo] alter authorization on schema::[db_backupoperator] to [db_backupoperator] alter authorization on schema::[db_ddladmin] to [dbo] alter authorization on schema::[db_ddladmin] to [db_ddladmin] alter authorization on schema::[db_owner] to [dbo] alter authorization on schema::[db_owner] to [db_owner]