如何更改数据库架构以DBO如何更改数据库架构以DBO(How do I change db sche

2019-05-12 22:19发布

我进口了一堆表从旧的SQL Server(2000年)到2008年我的数据库。 所有导入的表的前缀为我的用户名,例如: jonathan.MovieData 。 在该表中properties它列出了jonathan为DB模式。 当我写存储过程,我现在必须包括jonathan. 在所有的表名的前面这是令人困惑的。

我如何改变我的所有表被DBO代替乔纳森?

目前的结果: jonathan.MovieData

期望的结果: dbo.MovieData

Answer 1:

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

见ALTER SCHEMA 。

广义语法:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 


Answer 2:

您可以运行以下,这将产生一组ALTER模式语句为所有talbes的:

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

来自明白了这个网站 。

它还谈到做同样的存储的特效,如果你需要。



Answer 3:

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

参考: ALTER SCHEMA



Answer 4:

将表从dbo架构到MYSCHEMA:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable


从MYSCHEMA移至表dbo架构:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable


Answer 5:

我刚刚发布了这一个类似的问题: 在SQL Server 2005,我该如何改变表的“模式”不会丢失任何数据?


略有改善,以赛义德的出色答卷......

我加了一个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 Server Management Studio或Visual Studio中的数据传输来改变目标架构......最终我只是运行这个反对恢复倾倒在新服务器上得到的东西我想要的方式。



Answer 6:

您可以将多个数据库对象的批量修改架构在这篇文章中描述:

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



Answer 7:

办法做到这一点对个人的事情:

改变模式DBO转移jonathan.MovieData



Answer 8:

我也有类似的问题,但我的架构在它有一个反斜杠。 在这种情况下,包括架构周围的括号。

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


Answer 9:

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

ALTER SCHEMA模式名TRANSFER securable_name



Answer 10:

打开SQL Server为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]


文章来源: How do I change db schema to dbo