周波斯

导航

SQL Server Management Studio 一些正则小技巧

在开发过程中,有时会需要对数据库表进行增改操作,有些表的字段比较多,手写或者用SQL Server Management Studio直接生成脚本,也还需要对脚本进行大量的手工修改才能使用,于是,就想到能否用正则表达式替换字符的方式,来修改脚本,结果发现SQL Server Management Studio用的是特有的正则规则,使用还蛮简单的。

 下面举一个例子:

        生成表的Update脚本:

生成后的sql脚本如下:

UPDATE [FilterTasks]
   SET [ID] = <ID, varchar(36),>
      ,[ItemStatusForFilter] = <ItemStatusForFilter, varchar(20),>
      ,[SellerCidsForFilter] = <SellerCidsForFilter, varchar(255),>
      ,[MinQuantity] = <MinQuantity, int,>
      ,[MaxQuantity] = <MaxQuantity, int,>
      ,[CreateTime] = <CreateTime, datetime,>
      ,[FinishTime] = <FinishTime, datetime,>
      ,[FilterStatus] = <FilterStatus, varchar(20),>
      ,[FilterResult] = <FilterResult, bit,>
      ,[ErrorMessage] = <ErrorMessage, nvarchar(500),>
      ,[SumOfItems] = <SumOfItems, int,>
      ,[SuccessOfItems] = <SuccessOfItems, int,>
      ,[FailedOfItems] = <FailedOfItems, int,>
      ,[SellerNick] = <SellerNick, nvarchar(50),>
 WHERE <搜索条件,,>
GO

这段代码是无法直接放到代码中使用的,需要进行修改,

1、ctrl + h,打开查找替换窗口,

2、查找内容:[,替换为:空格。

3、查找内容:],替换为:空格。

4、查找内容:<,替换为:@。

执行完上面四个步骤后,得出结果:

UPDATE FilterTasks
   SET ID = @ID, varchar(36),>
      ,ItemStatusForFilter = @ItemStatusForFilter, varchar(20),>
      ,SellerCidsForFilter = @SellerCidsForFilter, varchar(255),>
      ,MinQuantity = @MinQuantity, int,>
      ,MaxQuantity = @MaxQuantity, int,>
      ,CreateTime = @CreateTime, datetime,>
      ,FinishTime = @FinishTime, datetime,>
      ,FilterStatus = @FilterStatus, varchar(20),>
      ,FilterResult = @FilterResult, bit,>
      ,ErrorMessage = @ErrorMessage, nvarchar(500),>
      ,SumOfItems = @SumOfItems, int,>
      ,SuccessOfItems = @SuccessOfItems, int,>
      ,FailedOfItems = @FailedOfItems, int,>
      ,SellerNick = @SellerNick, nvarchar(50),>
 WHERE @搜索条件,,>
GO

下面需要替换的是  , varchar(36),>  |  , varchar(20),> |  , int,> 等内容,需要用到正则表达式

1、ctrl + h,打开查找替换窗口。

2、在查找替换窗口下面的【查找选项】中勾选 【使用(E)】:正则表达式。

3、查找内容:,:b:i*(\(:z*\))*,\>    替换内容:空格。(:b 匹配空格或制表符;:i 匹配表达式 ([a-zA-Z_$][a-zA-Z0-9_$]*);:z 匹配表达式 ([0-9]+))

执行后得出结果:

UPDATE FilterTasks
   SET ID = @ID
      ,ItemStatusForFilter = @ItemStatusForFilter
      ,SellerCidsForFilter = @SellerCidsForFilter
      ,MinQuantity = @MinQuantity
      ,MaxQuantity = @MaxQuantity
      ,CreateTime = @CreateTime
      ,FinishTime = @FinishTime
      ,FilterStatus = @FilterStatus
      ,FilterResult = @FilterResult
      ,ErrorMessage = @ErrorMessage
      ,SumOfItems = @SumOfItems
      ,SuccessOfItems = @SuccessOfItems
      ,FailedOfItems = @FailedOfItems
      ,SellerNick = @SellerNick
 WHERE @搜索条件,,>
GO

这个结果基本可以直接使用了,如果不想那么多换行,可以再用以下的正则表达式替换一下,去掉换行

1、ctrl + h,打开查找替换窗口。

2、在查找替换窗口下面的【查找选项】中勾选 【使用(E)】:正则表达式。

3、查找内容:\n:b*,    替换内容:,(:b 匹配空格或制表符)

执行后得到以下结果:

UPDATE FilterTasks
   SET ID = @ID,ItemStatusForFilter = @ItemStatusForFilter,SellerCidsForFilter = @SellerCidsForFilter,MinQuantity = @MinQuantity,MaxQuantity = @MaxQuantity,CreateTime = @CreateTime,FinishTime = @FinishTime,FilterStatus = @FilterStatus,FilterResult = @FilterResult,ErrorMessage = @ErrorMessage,SumOfItems = @SumOfItems,SuccessOfItems = @SuccessOfItems,FailedOfItems = @FailedOfItems,SellerNick = @SellerNick
 WHERE @搜索条件,,>
GO

这个基本上直接复制到程序中就可以使用了。

 

insert 语句可以参考上面的正则表达式去实现。

学会SQL Server Management Studio的正则表达式查找替换技巧还是很有用的,经常需要编辑生成脚本,可以减少大量的手工操作

 

参考资料:https://docs.microsoft.com/zh-cn/sql/ssms/scripting/search-text-with-regular-expressions?f1url=%3FappId%3DDev10IDEF1%26l%3DZH-CN%26k%3Dk(VS.REGULAREXPRESSIONBUILDER)%26rd%3Dtrue&view=sql-server-ver15

 

posted on 2020-10-26 23:41  周波斯  阅读(313)  评论(0编辑  收藏  举报