日期:2014-05-18  浏览次数:20380 次

我从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 #t
set 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 proc