Sai*_*nin 14 sql-server stored-procedures xp-cmdshell
我一直在网上搜索一下,似乎从XP_CMDSHELL获取结果的唯一方法是将它们存储到临时表中.真的没有更简单的方法吗?
来自专家交流:
不,xp_cmdshell不会从exe返回任何信息.如果您不在master数据库中运行它,则必须使用以下语法.master..xp_cmdshell.您必须授予您的用户在master数据库中执行此过程的权限.您必须让您的exe自己插入信息,因为它无法将信息返回给调用它的进程.
和...
虽然@result只从xp_cmdshell获取返回值,但您可以通过直接插入表中来捕获命令的结果......如下所示:
因人而异...
set nocount on
declare @filepath varchar(255),
@cmd varchar(255),
@rc int
select @filepath = 'c:\temp\'
select @cmd = 'dir ' + @filepath + '~*.tmp'
create table #output (output varchar(255) null)
insert #output exec @rc = master..xp_cmdshell @cmd
select * from #output where output is not null
drop table #output
Run Code Online (Sandbox Code Playgroud)
Ed *_*per 20
没有更简单的方法来捕获STDOUT/STDERR反馈xp_cmdshell; 至少有一个替代方案但它不能被归类为更容易:
可以将命令的输出重定向到文本文件作为命令的一部分,然后使用读取文本文件OPENROWSET.
顺便说一下,上面发布的脚本中至少有一个错误.xp_cmdshell状态的文档,它将命令输出返回为nvarchar(255).
此外,临时表应该有一个标识列,否则结果可能不会以正确的顺序显示:
...
create table #output (id int identity(1,1), output nvarchar(255) null)
insert #output (output) exec @rc = master..xp_cmdshell @cmd
select * from #output where output is not null order by id
drop table #output
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48889 次 |
| 最近记录: |