SQL 2005 如何批量修改表和預存程序的架構
***首先需要在要修改的庫的安全選擇中對其中的架構項添加一個新的架構所有者
1。先說說如何在SQL 2005中批量修改預存程序的架構。
執行以下SQL,將執行結果拷貝出來,批量執行既可。
SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + p.Name
FROM sys.Procedures p INNER JOIN sys.Schemas s on p.schema_id = s.schema_id
WHERE s.Name = '舊的架構名稱'
2。再說說如何在SQL 2005中批量修改表的架構。
方法一:執行以下SQL,將執行結果拷貝出來,批量執行既可。
declare @name sysname
declare csr1 cursor
for
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
open csr1
FETCH NEXT FROM csr1 INTO @name
while (@@FETCH_STATUS=0)
BEGIN
SET @name='舊的架構名稱.' + @name
print 'ALTER SCHEMA dbo(新的架構名稱) TRANSFER ' + @name
fetch next from csr1 into @name
END
CLOSE csr1
DEALLOCATE csr1
方法二:使用系統預存程序sp_MSforeachtable
EXEC sp_MSforeachtable @command1= "EXEC SP_ChangeObjectOwner '? ', '新架構名 ' "
註:需要先刪除該使用者所擁有的架構或更改此架構的所有者。否則會提示“資料庫主體在該資料庫中擁有架構,無法刪除”;
每一個資料庫使用者對應於一個系統登陸帳號,並且每一個架構只能賦予一個使用者,所以直接刪除使用者的架構是不可以的;
可以在使用者映射裡面將db_owner架構付給dbo(或者執行ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo);
然後就可以刪除之前的使用者了。