如何将db模式更改为dbo

jon*_*all 113 sql database sql-server schema sql-server-2008

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

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

目前的结果: jonathan.MovieData

期望的结果: dbo.MovieData

Rem*_*anu 173

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
Run Code Online (Sandbox Code Playgroud)

ALTER SCHEMA.

广义语法:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
Run Code Online (Sandbox Code Playgroud)

  • 为Google员工节省时间:ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; (11认同)
  • @leigero使用`[`和`]`,就像您想精确了解SQL对象名称的其他情况一样。`[domain \ user123] .TableName`。 (2认同)

pat*_*ech 38

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

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'
Run Code Online (Sandbox Code Playgroud)

然后,您必须在查询分析器中复制并运行语句.

这是一个较旧的脚本,也会为你做这件事,我认为通过更改对象所有者.但是,在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
Run Code Online (Sandbox Code Playgroud)

这个网站得到它.

如果需要,它还讨论了为存储过程做同样的事情.


Mit*_*eat 20

USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
Run Code Online (Sandbox Code Playgroud)

参考:ALTER SCHEMA


Ner*_*u-J 13

将表从dbo架构移动到MySchema:

 ALTER SCHEMA MySchema TRANSFER dbo.MyTable
Run Code Online (Sandbox Code Playgroud)


将表从MySchema移动到dbo架构:

 ALTER SCHEMA dbo TRANSFER MySchema.MyTable
Run Code Online (Sandbox Code Playgroud)


Lan*_*ico 8

我刚刚发布了一个类似的问题:在sql server 2005中,如何在不丢失任何数据的情况下更改表的"模式"?


一个微小的改进赛义德的出色答卷......

我添加了一个exec来让这个代码自行执行,我在顶部添加了一个union,这样我就可以更改表和存储过程的模式:

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
Run Code Online (Sandbox Code Playgroud)

我也不得不恢复dbdump,并发现架构不是dbo - 我花了好几个小时试图让Sql Server管理工作室或visual studio数据传输来改变目标架构......我最后只是针对恢复运行这个在新服务器上转储以获得我想要的方式.


ana*_*lov 5

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

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