读书人

小弟我从sql2005导出所有的存储脚本

发布时间: 2012-04-25 19:32:32 作者: rapoo

我从sql2005导出所有的存储脚本,要全部去掉注释,如何实现的
比如我导出的脚本,内容是:
EXEC dbo.sp_executesql @statement = N'--============
--作 者:abc
--创建日期:2008-10-25
--功 能:返回所有单据编号的存储过程
--最后修改日期:2008-10-25
--drop procedure p_get_bill_code
--=================
CREATE procedure [dbo].[p_get_bill_code]
@billcode varchar(50) output,
@table_name varchar(50),
@code_fieldname varchar(50),
@prefix varchar(50) = '''' --前缀,默认为空
as begin
--set nocount on

declare @max_code varchar(50)
declare @str_number varchar(50)
declare @sql varchar(2000)

我想把凡是有“--”的注释包括以后的内容,就用空格来代替或删除掉,比如上面的内容变成:

EXEC dbo.sp_executesql @statement = N'
CREATE procedure [dbo].[p_get_bill_code]
@billcode varchar(50) output,
@table_name varchar(50),
@code_fieldname varchar(50),
@prefix varchar(50) = ''''
as begin


declare @max_code varchar(50)
declare @str_number varchar(50)
declare @sql varchar(2000)

请问如何实现,因为我导出的脚本的内容简介有十几万行的,如果用人工去删除,要一行一行来删除,会浪费很多时间的,请问怎么来搞,或用什么软件可以实现,比如word软件或其它软件是否可以实现?

[解决办法]
如果都是以
--============
开头和结尾的
就以这个为标示
从--============
到--============
用''替换

[解决办法]

探讨
引用:

如果都是以
--============
开头和结尾的
就以这个为标示
从--============
到--============
用''替换


那如果是有:--前缀,默认为空 或者“--set nocount on ”, 这个又怎么搞注释的内容是什么都有的,那又怎么来解决?

[解决办法]
SQL code
/*create function [dbo].[m_split](@c varchar(2000),@split varchar(2))     returns @t table(col varchar(200))     as       begin         while(charindex(@split,@c)<>0)           begin             insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))               set @c = stuff(@c,1,charindex(@split,@c),'')            -- SET @c = substring(@c,charindex(' ',@c)+1,len(@c))             end         insert @t(col) values (@c)         return   end*/declare @t varchar(max)set @t='EXEC dbo.sp_executesql @statement = ''N--============--作 者:abc--创建日期:2008-10-25--功 能:返回所有单据编号的存储过程  --最后修改日期:2008-10-25--drop procedure p_get_bill_code--=================CREATE procedure [dbo].[p_get_bill_code]     @billcode varchar(50) output,     @table_name varchar(50),     @code_fieldname varchar(50),     @prefix varchar(50) = '''' --前缀,默认为空   as begin     --set nocount on    declare @max_code varchar(50)     declare @str_number varchar(50)     declare @sql varchar(2000) 'select * into #t from [dbo].[m_split](@t,char(13)) where col<>''update #tset col=left(col,case charindex('--',col)when 0 then len(col) else charindex('--',col)-2 end)declare @sql varchar(max) set @sql=''select @sql=@sql+col+char(13) from #t where col<>'' and col<>char(13) and col<>char(9) and col<>char(10)select @sql/*EXEC dbo.sp_executesql @statement = 'CREATE procedure [dbo].[p_get_bill_code]  @billcode varchar(50) output,  @table_name varchar(50),  @code_fieldname varchar(50),  @prefix varchar(50) = ''as begin  declare @max_code varchar(50)  declare */drop table #t
[解决办法]
--修正一下,写错一个数字

SQL code
declare @t varchar(max)set @t='EXEC dbo.sp_executesql @statement = ''N--============--作 者:abc--创建日期:2008-10-25--功 能:返回所有单据编号的存储过程  --最后修改日期:2008-10-25--drop procedure p_get_bill_code--=================CREATE procedure [dbo].[p_get_bill_code]     @billcode varchar(50) output,     @table_name varchar(50),     @code_fieldname varchar(50),     @prefix varchar(50) = '''' --前缀,默认为空   as begin     --set nocount on    declare @max_code varchar(50)     declare @str_number varchar(50)     declare @sql varchar(2000) 'select * into #t from [dbo].[m_split](@t,char(13)) where col<>''update #tset col=left(col,case charindex('--',col)when 0 then len(col) else charindex('--',col)-1 end)declare @sql varchar(max) set @sql=''select @sql=@sql+col+char(13) from #t where col<>'' and col<>char(13) and col<>char(9) and col<>char(10)select @sql/*EXEC dbo.sp_executesql @statement = 'NCREATE procedure [dbo].[p_get_bill_code]  @billcode varchar(50) output,  @table_name varchar(50),  @code_fieldname varchar(50),  @prefix varchar(50) = '' as begin  declare @max_code varchar(50)*/drop table #t 


[解决办法]
这东西很多问题要考虑
用/**/
也要考虑进去
--不规则如--- ----等
动态中如果用到的--是不是要也考虑
条件中的值如果有--是不是也要考虑
好多东西都要考虑
写过程
添加注释本来就是提倡的习惯 不知道楼主目的是什么

[解决办法]
人家问你为什么要去掉注释呢!瞎折腾!
叶子的方式你可以试下循环执行,要不然没这么智能的玩意!
[解决办法]

探讨
引用:

人家问你为什么要去掉注释呢!瞎折腾!
叶子的方式你可以试下循环执行,要不然没这么智能的玩意!

我发布的数据库里的存储过程里,有很多注释,我要把它去掉,这个就是我的目的
叶子的方式肯定是不行,因为我生成的脚本有几十万行,而定义最大的varchar才8000个字符,所以我说肯定是不行的。

[解决办法]
我见过一个js格式化工具,可以去掉js的注释的,但是SQL server 的我没有见过。

读书人网 >SQL Server

热点推荐