我的数据库中有一堆存储过程(超过200个)。
我现在必须改变那些模式。他们有架构ABC
。我必须将其更改为XYZ
。
我知道我可以使用此查询
ALTER SCHEMA XYZ TRANSFER ABC.STOREDPROCEDURE
实现这一目标。
但是存储过程的数量是巨大的。我不能一个接一个地做。有没有其他方法可以完成这项任务?我可以使用while循环吗?
谢谢大家。
答案 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');
}