正则表达式用声明替换存储过程参数
Regex to replace stored procedure params with declarations
我经常不得不重写存储过程,因为我没有 "normal" 代码的执行权——这意味着将存储过程参数重写为声明 + SET。
例如:
@pParam VARCHAR(20),
@pPlant VARCHAR(4) = NULL,
@pDateTimeFrom VARCHAR(30) = NULL,
@pDateTimeTo VARCHAR(30) = NULL,
@pLanguage VARCHAR(2) = 'EN',
@pClass NVARCHAR(MAX) = NULL,
@pFilterCompleteDate BIT = NULL,
@user VARCHAR(50) = NULL,
@updateKey VARCHAR(50) = NULL,
@seqnoKey INT = NULL,
@comment VARCHAR(1000) = NULL,
@testID INT = NULL,
@info NVARCHAR(MAX) = NULL
使用正则表达式查找和替换,我希望采用这种格式:
DECLARE @pParam VARCHAR(20)
SET @pParam =
DECLARE @pPlant VARCHAR(4)
SET @pPlant = NULL
DECLARE @pDateTimeFrom VARCHAR(30)
SET @pDateTimeFrom = NULL
DECLARE @pDateTimeTo VARCHAR(30)
SET @pDateTimeTo = NULL
DECLARE @pLanguage VARCHAR(2)
SET @pLanguage = 'EN'
DECLARE @pClass NVARCHAR(MAX)
SET @pClass = NULL
DECLARE @pFilterCompleteDate BIT
SET @pFilterCompleteDate = NULL
DECLARE @user VARCHAR(50)
SET @user = NULL
DECLARE @updateKey VARCHAR(50)
SET @updateKey = NULL
DECLARE @seqnoKey INT
SET @seqnoKey = NULL
DECLARE @comment VARCHAR(1000)
SET @comment = NULL
DECLARE @testID INT
SET @testID = NULL
DECLARE @info NVARCHAR(MAX)
SET @info = NULL
我想出了这个正则表达式
查找:
(@.+?)\b\s+\b(.*?)(\s=\s(.*),?|,)
替换:
DECLARE \r\nSET =
但是第 4 个捕获组在字符串末尾包含 ,
。当我将它包含在正则表达式中时,它没有得到没有值的第一行和没有逗号的最后一行。
你能帮我找到一个可以正确找到所有声明的正则表达式吗(没有值,值,没有逗号)。谢谢!
您可以使用
(@\S+)\s+\b([^=\n]*?)(\s*=\s*(.*?))?,?(?=$|\r?\n)
并替换为DECLARE \r\nSET =
。
查看 regex demo 输出:
DECLARE @pParam VARCHAR(20)
SET @pParam =
DECLARE @pPlant VARCHAR(4)
SET @pPlant = NULL
DECLARE @pDateTimeFrom VARCHAR(30)
SET @pDateTimeFrom = NULL
DECLARE @pDateTimeTo VARCHAR(30)
SET @pDateTimeTo = NULL
DECLARE @pLanguage VARCHAR(2)
SET @pLanguage = 'EN'
DECLARE @pClass NVARCHAR(MAX)
SET @pClass = NULL
DECLARE @pFilterCompleteDate BIT
SET @pFilterCompleteDate = NULL
DECLARE @user VARCHAR(50)
SET @user = NULL
DECLARE @updateKey VARCHAR(50)
SET @updateKey = NULL
DECLARE @seqnoKey INT
SET @seqnoKey = NULL
DECLARE @comment VARCHAR(1000)
SET @comment = NULL
DECLARE @testID INT
SET @testID = NULL
DECLARE @info NVARCHAR(MAX)
SET @info = NULL
我经常不得不重写存储过程,因为我没有 "normal" 代码的执行权——这意味着将存储过程参数重写为声明 + SET。
例如:
@pParam VARCHAR(20),
@pPlant VARCHAR(4) = NULL,
@pDateTimeFrom VARCHAR(30) = NULL,
@pDateTimeTo VARCHAR(30) = NULL,
@pLanguage VARCHAR(2) = 'EN',
@pClass NVARCHAR(MAX) = NULL,
@pFilterCompleteDate BIT = NULL,
@user VARCHAR(50) = NULL,
@updateKey VARCHAR(50) = NULL,
@seqnoKey INT = NULL,
@comment VARCHAR(1000) = NULL,
@testID INT = NULL,
@info NVARCHAR(MAX) = NULL
使用正则表达式查找和替换,我希望采用这种格式:
DECLARE @pParam VARCHAR(20)
SET @pParam =
DECLARE @pPlant VARCHAR(4)
SET @pPlant = NULL
DECLARE @pDateTimeFrom VARCHAR(30)
SET @pDateTimeFrom = NULL
DECLARE @pDateTimeTo VARCHAR(30)
SET @pDateTimeTo = NULL
DECLARE @pLanguage VARCHAR(2)
SET @pLanguage = 'EN'
DECLARE @pClass NVARCHAR(MAX)
SET @pClass = NULL
DECLARE @pFilterCompleteDate BIT
SET @pFilterCompleteDate = NULL
DECLARE @user VARCHAR(50)
SET @user = NULL
DECLARE @updateKey VARCHAR(50)
SET @updateKey = NULL
DECLARE @seqnoKey INT
SET @seqnoKey = NULL
DECLARE @comment VARCHAR(1000)
SET @comment = NULL
DECLARE @testID INT
SET @testID = NULL
DECLARE @info NVARCHAR(MAX)
SET @info = NULL
我想出了这个正则表达式
查找:
(@.+?)\b\s+\b(.*?)(\s=\s(.*),?|,)
替换:
DECLARE \r\nSET =
但是第 4 个捕获组在字符串末尾包含 ,
。当我将它包含在正则表达式中时,它没有得到没有值的第一行和没有逗号的最后一行。
你能帮我找到一个可以正确找到所有声明的正则表达式吗(没有值,值,没有逗号)。谢谢!
您可以使用
(@\S+)\s+\b([^=\n]*?)(\s*=\s*(.*?))?,?(?=$|\r?\n)
并替换为DECLARE \r\nSET =
。
查看 regex demo 输出:
DECLARE @pParam VARCHAR(20)
SET @pParam =
DECLARE @pPlant VARCHAR(4)
SET @pPlant = NULL
DECLARE @pDateTimeFrom VARCHAR(30)
SET @pDateTimeFrom = NULL
DECLARE @pDateTimeTo VARCHAR(30)
SET @pDateTimeTo = NULL
DECLARE @pLanguage VARCHAR(2)
SET @pLanguage = 'EN'
DECLARE @pClass NVARCHAR(MAX)
SET @pClass = NULL
DECLARE @pFilterCompleteDate BIT
SET @pFilterCompleteDate = NULL
DECLARE @user VARCHAR(50)
SET @user = NULL
DECLARE @updateKey VARCHAR(50)
SET @updateKey = NULL
DECLARE @seqnoKey INT
SET @seqnoKey = NULL
DECLARE @comment VARCHAR(1000)
SET @comment = NULL
DECLARE @testID INT
SET @testID = NULL
DECLARE @info NVARCHAR(MAX)
SET @info = NULL