适用于sql2k和2005
/*fcuandy*/
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
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
##
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
因为我建了两个存储过程进行测试的,一个为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 可自行修改.
使用时要注意的就这些了.