我从sql2005导出所有的存储脚本,要全部去掉注释,如何实现的

fstao 2012-02-03 01:01:22
比如我导出的脚本,内容是:
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软件或其它软件是否可以实现?
...全文
147 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vidor 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vidor 的回复:]

/**/这东西要用正则平衡组,纯SQL就别想了。

就算那没/**/嵌套,纯SQL也不可能实现,变量字符串中来个'/*'就歇菜了。
[/Quote]

一定要SQL来搞,也不是完全没有办法,山寨几个堆栈,解析文本。

我是自己是不会去实现这个想法的,你不妨试下,方向应该没错。
阿呆哥 2012-02-03
  • 打赏
  • 举报
回复
搜索下,别的数据库的我见过,mssql的也应该有
Vidor 2012-02-03
  • 打赏
  • 举报
回复
/**/这东西要用正则平衡组,纯SQL就别想了。

就算那没/**/嵌套,纯SQL也不可能实现,变量字符串中来个'/*'就歇菜了。
叶子 2012-02-03
  • 打赏
  • 举报
回复
我见过一个js格式化工具,可以去掉js的注释的,但是SQL server 的我没有见过。
叶子 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fstao 的回复:]
引用 10 楼 geniuswjt 的回复:

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

我发布的数据库里的存储过程里,有很多注释,我要把它去掉,这个就是我的目的
叶子的方式肯定是不行,因为我生成的脚本有几十万行,而定义最大的varchar才8000个字符,所以我说肯定是不行的。
[/Quote]
我只是提个思路,SQL SERVER 2005中有varchar(max)支持2G数据,但是按我的思路做也很麻烦,正如紫竹提到的/**/ 或是字符'--' 非注释,或是同一行多个分段的-- 都需要处理,还是很麻烦的,效率上也不给力。
fstao 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 geniuswjt 的回复:]

人家问你为什么要去掉注释呢!瞎折腾!
叶子的方式你可以试下循环执行,要不然没这么智能的玩意!
[/Quote]
我发布的数据库里的存储过程里,有很多注释,我要把它去掉,这个就是我的目的
叶子的方式肯定是不行,因为我生成的脚本有几十万行,而定义最大的varchar才8000个字符,所以我说肯定是不行的。
geniuswjt 2012-02-03
  • 打赏
  • 举报
回复
人家问你为什么要去掉注释呢!瞎折腾!
叶子的方式你可以试下循环执行,要不然没这么智能的玩意!
fstao 2012-02-03
  • 打赏
  • 举报
回复
我发布的数据库里的存储过程里,有很多注释,我要把它去掉,这个就是我的目的
fstao 2012-02-03
  • 打赏
  • 举报
回复
我把我的想法说一说,我写了有几百个存储过程,每一个存储过程都有注释。我用sql2005生成所有的脚本,这些脚本有几十万行,而且这些脚本里有注释,我只要把里面的注释去掉就可以了,用什么方法最快?当然我不可能人工去一行一行的删除这些注释
fstao 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 maco_wang 的回复:]

--修正一下,写错一个数字

SQL code

declare @t varchar(max)
set @t=
'
EXEC dbo.sp_executesql @statement = ''N--============
--作 者:abc
--创建日期:2008-10-25
--功 能:返回所有单据编号的存储过程
--最后修改日期:2008-10-25
--drop proced……
[/Quote]

用这个方法,明显是不可能的,因为我的sql语句是几十万行
紫竹林畔 2012-02-03
  • 打赏
  • 举报
回复
这东西很多问题要考虑
用/**/
也要考虑进去
--不规则如--- ----等
动态中如果用到的--是不是要也考虑
条件中的值如果有--是不是也要考虑
好多东西都要考虑
写过程
添加注释本来就是提倡的习惯 不知道楼主目的是什么
叶子 2012-02-03
  • 打赏
  • 举报
回复
--修正一下,写错一个数字


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)-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 = '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)
*/
drop table #t
叶子 2012-02-03
  • 打赏
  • 举报
回复

/*
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
紫竹林畔 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fstao 的回复:]
引用 1 楼 的回复:

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


那如果是有:--前缀,默认为空 或者“--set nocount on ”, 这个又怎么搞注释的内容是什么都有的,那又怎么来解决?
[/Quote]
这个估计困难
也不会
等高手吧
fstao 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

那如果是有:--前缀,默认为空 或者“--set nocount on ”, 这个又怎么搞注释的内容是什么都有的,那又怎么来解决?
紫竹林畔 2012-02-03
  • 打赏
  • 举报
回复
如果都是以
--============
开头和结尾的
就以这个为标示
从--============
到--============
用''替换

11,848

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧