得用SQL语句生成某个库下所有存储过程脚本,并每个存为一个文件

本文介绍了一段SQL脚本,该脚本用于将SQL Server 2000及2005版本中的存储过程导出到文本文件。通过处理存储过程中包含的换行符和回车符等特殊字符,确保了导出过程的顺利进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适用于sql2k和2005

 

/*fcuandy*/
DECLARE @s VARCHAR(4000),@n INT,@i INT,@s1 VARCHAR(100)
SELECT IDENTITY(INT) id,text INTO ## 
    
FROM syscomments
SELECT @n=@@ROWCOUNT,@i=0
WHILE @i<@n
    
BEGIN
        
SELECT @i=@i+1,@s=''
        
SELECT @s1=REPLACE(REPLACE(RTRIM(LTRIM(STUFF(STUFF(text,CHARINDEX('AS',text),40000,''),1,CHARINDEX('PROC',STUFF(text,CHARINDEX('AS',text),40000,''))+4,''))),CHAR(10),''),CHAR(13),'')
            
FROM ## WHERE ID=RTRIM(@i)
            
--SELECT @s1,ASCII(SUBSTRING(@s1,3,1))
            --SELECT LEN(REPLACE(REPLACE(@s1,CHAR(13),''),CHAR(10),''))
        SELECT @s='SELECT text FROM tempdb.dbo.## WHERE ID=' + RTRIM(@i)
        
EXEC('EXEC master..xp_cmdshell ''bcp "' + @s + ' "  queryout "e:ProcTXT/' + @s1 + '.txt" -S"pcnameSQLEXPRESS" -c -U"sa" -P"xxxx"''')
    
END
DROP TABLE ##

 

因为我建了两个存储过程进行测试的,一个为p1,一个为p2,存储过程名都只有2字符,用len查看却是4,就用substring(3,1)查,再取asc码,得到13,
才知道是多了换行符加回车符.   即   char(13)和char(10),   /r/n,   呵呵.


开始,没处理这个时,   查询分析器老提示我,帐号不对,害我查了好多地方.

用   exec('   exec   ...   嵌套的原因是,
exec   master..xp_cmdshell执行时,参数是为常量字串,不能为变量,   所以只能多加一层exec   ,让它构造出供内层   exec   master..使用的字串常量.

在2k和2005下均可使用.

2005默认的使用windows认证,我的语句中用的SQL认证,   那么,   需要你适当的修改语句,或更改SQL注册属性.

另外2005下默认的xp_cmdshell是禁用的,你可以外围应用适配器里设置启用它,也可以使用sp_configure启用它.

生成的存储过程放在了   e:/ProcTXT   目录下,名为   过程名.txt     可自行修改.

使用时要注意的就这些了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值