更改所有存储过程的架构

时间:2014-08-21 03:49:44

标签: sql sql-server stored-procedures

我的数据库中有一堆存储过程(超过200个)。

我现在必须改变那些模式。他们有架构ABC。我必须将其更改为XYZ

我知道我可以使用此查询

ALTER SCHEMA XYZ TRANSFER ABC.STOREDPROCEDURE

实现这一目标。

但是存储过程的数量是巨大的。我不能一个接一个地做。有没有其他方法可以完成这项任务?我可以使用while循环吗?

谢谢大家。

4 个答案:

答案 0 :(得分:2)

运行此脚本以生成所需的语句

SELECT 'ALTER SCHEMA NewSchemaName TRANSFER ' + SysSchemas.Name + '.' + DbObjects.Name + ';'
FROM sys.Objects DbObjects
INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id
WHERE SysSchemas.Name = 'OldSchemaName'
AND (DbObjects.Type IN ('P'))

答案 1 :(得分:2)

我会使用Sql Server为我生成代码。

SELECT 'ALTER SCHEMA XYZ TRANSFER ABC.' + name
FROM sys.Procedures

然后将结果复制并粘贴到Sql窗口并点击执行按钮......

答案 2 :(得分:0)

尝试使用以下查询:

DECLARE @Command NVARCHAR(Max)
SET @Command = (SELECT 'ALTER SCHEMA XYZ TRANSFER ABC.' + name +'; '
                FROM sys.Procedures
                FOR XML PATH(''))


EXEC(@Command)

答案 3 :(得分:0)

我在powershell中做到了

import-module sqlps;
$server = new-object microsoft.sqlserver.management.smo.server 'yourServer';
$db = $server.Databases['yourDB'];
$procs = $db.StoredProcedures | where {$_.Schema -eq 'ABC'};
foreach ( $proc in $procs ) {
   $proc.ChangeSchema('XYZ');
}