在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