如何将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]