在sql server 2005中,如何更改表的"模式"而不丢失任何数据?

时间:2020-03-06 14:19:48  来源:igfitidea点击:

我有一个进入" db_owner"模式的表,并且在" dbo"模式中需要它。

是否有运行脚本或者命令以进行切换?

解决方案

ALTER SCHEMA [NewSchema] TRANSFER [OldSchema].[Table1]

在SQL Server Management Studio中:

  • 右键单击该表,然后选择"修改"(现在称为"设计")
  • 在属性面板上,选择正确的拥有架构。

我们需要首先停止与数据库的所有连接,通过运行以下命令更改" db_owner"表的所有权

sp_MSforeachtable @command1="sp_changeobjectowner ""?"",'dbo'"

在哪里 ?是表名。

简单的答案

sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

我们无需停止与数据库的所有连接,这可以随时进行。

当我使用SQL Management Studio时,没有"修改"选项,只有"设计"或者"编辑"选项。如果我们拥有Visual Studio(我已经检查了VS.NET 2003、2005和2008),则可以使用服务器资源管理器来更改架构。右键单击表,然后选择"设计表"(2008)或者"打开表定义"(2003、2005)。突出显示完整的"列名称"列。然后,我们可以右键单击并选择"属性页"或者"属性"(2008)。在属性表中,我们应该会看到"所有者"(2003&2005)或者"模式"(2008),以及可能的模式的下拉列表。

通过此选择显示所有" TABLE_SCHEMA":

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES

我们可以使用此查询将所有表的所有架构更改为dbo表架构:

DECLARE cursore CURSOR FOR 

SELECT TABLE_SCHEMA, TABLE_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     
 FETCH NEXT FROM cursore INTO @schema, @tab     
END 

CLOSE cursore     
DEALLOCATE cursore