在开发过程中,有时会需要对数据库表进行增改操作,有些表的字段比较多,手写或者用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、查找内容: :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的正则表达式查找替换技巧还是很有用的,经常需要编辑生成脚本,可以减少大量的手工操作