【发布时间】:2018-09-24 00:31:10
【问题描述】:
我创建了一个过程,可以在其中传递以逗号分隔的过程名称列表,然后我想通过在末尾添加自定义后缀来重命名列表中的所有过程。
但我面临一个问题,它只会重命名列表中的最后一项,而忽略所有其余项。我不知道为什么它不会重命名表变量列表中的每一项,因为我在列表中的每一项上都调用了sp_rename。
另外,我可以使用raiseerror() 打印每个循环
这是我编写的完整程序。
CREATE PROCEDURE [dbo].[Util_ProcRename]
@ProcNameListWithComma VARCHAR(MAX)
AS
BEGIN
DECLARE @ID INT
SET @ID = 1;
DECLARE @oldname varchar(200)
DECLARE @newname varchar(200);
DECLARE @NOTUSED VARCHAR(20)
SET @NOTUSED = '_NOTUSED_'+REPLACE(CONVERT(varchar(20), GETDATE(), 101),'/','')
DECLARE @ProList AS TABLE (
ID INT IDENTITY,
ProcName VARCHAR(200),
NewProcName VARCHAR(200)
);
--Get proc names from a list into a table with ID to use in While loop
INSERT INTO @ProList (ProcName)
SELECT P AS ProcName
FROM dbo.SplitText(@ProcNameListWithComma,',')
WHILE (@id <= (SELECT MAX(ID) FROM @ProList))
BEGIN
SET @oldname = (SELECT ProcName FROM @ProList WHERE ID = @ID)
SET @newname = @oldname + @NOTUSED
EXEC p_rename @oldname, @newname
SET @ID = @ID + 1
END
UPDATE p
SET NewProcName = p.ProcName+@NOTUSED
FROM @ProList p
WHERE ID = ID
--TO see the list that got renamed
SELECT
a.Name AS [NewName],
a.type
FROM
dbo.sysobjects a
WHERE
name IN (SELECT NewProcName FROM @ProList)
END
GO
【问题讨论】:
-
您可以通过将所有存储过程检查到源代码控制系统中来解决此问题,然后从服务器中删除您不使用的过程。
-
我的公司不想删除任何东西,这就是为什么我需要重命名前缀_NOTUSED_
-
在源代码管理中 == 未删除。
-
@EricBrandt 是的,我想念理解。
标签: sql sql-server-2008 tsql stored-procedures