DECLARE @NAME SYSNAME --表名变量
DECLARE CSR CURSOR --定义一个游标
FOR
SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U ' --在系统表SYSOBJECTS 中取[XTYPE = 'U '] ,即取用户表的表名
OPEN CSR
DECLARE @SCHEMATABLE VARCHAR (200) --定义一个字符串存放执行语句
FETCH NEXT FROM CSR INTO @NAME --将游标向下移1行,获取的数据放入之前定义的变量@NAME中
WHILE (@@FETCH_STATUS=0) --判断是否成功获取数据
BEGIN
--语句中的'HS.'是需要修改的架构名,'DBO'是目标架构名,可以修改
SET @NAME = 'HS.' + @NAME
PRINT 'ALTER SCHEMA DBO TRANSFER ' + @NAME --输出执行语句内容
SET @SCHEMATABLE = 'ALTER SCHEMA DBO TRANSFER ' + @NAME --生成动态执行语句
EXEC (@SCHEMATABLE) --开始执行
FETCH NEXT FROM CSR INTO @NAME --将游标向下移1行
END
CLOSE CSR --关闭游标
DEALLOCATE CSR --删除游标引用,释放了游标占用的内存空间
关于表SYSOBJECTS 的官方解释:https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql?view=sql-server-ver15