gpt4 book ai didi

sql-server - 从 XP_CMDSHELL 获取结果

转载 作者:行者123 更新时间:2023-12-02 07:27:47 27 4
gpt4 key购买 nike

我一直在网上搜索一些,似乎从 XP_CMDSHELL 获取结果的唯一方法是将它们存储到临时表中。真的没有更简单的方法吗?

来自专家交流:

No, xp_cmdshell will not return any information from the exe. and you have to use the following syntax if you are not in the master database to run it. master..xp_cmdshell. You will have to give your user permission to execute this procedure in the master database. You will have to have your exe insert the information its self because it can not return information to the process that called it.

还有...

虽然@result仅从xp_cmdshell获取返回值,但您也许能够捕获结果通过直接插入到表中来执行命令...如下所示:

ymmv...

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

最佳答案

没有更简单的方法可以从 xp_cmdshell 捕获 STDOUT/STDERR 反馈;至少有一种替代方案,但它不能被归类为更简单的:
可以将命令的输出重定向到文本文件作为命令的一部分,然后使用 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

关于sql-server - 从 XP_CMDSHELL 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com