标签: xp-cmdshell

使用SQL Server读取文本文件

我试图从SQL查询(SQL Server 2005)中读取文本文件,但根本没有运气.我用EXEC和xp_cmdshell尝试了各种各样的东西,但都没有用.这是我试图解决这个问题的一般方法:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
Run Code Online (Sandbox Code Playgroud)

然后我尝试从临时表中选择数据.我经常搜索,我不知道自己错了什么.救命?

sql-server sql-server-2005 xp-cmdshell

33
推荐指数
2
解决办法
16万
查看次数

获得xp_cmdshell的执行权限

尝试从存储过程中执行xp_cmdshell时,我看到一条错误消息.

在实例上启用了xp_cmdshell .和执行权限被授予给我的用户,但我还是看到了异常.

对象'xp_cmdshell',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝

部分问题是这是一个共享集群,我们在实例上有一个数据库,因此我们没有完整的管理员权限.所以我不能进入并授予权限,什么不是.

database sql-server xp-cmdshell

32
推荐指数
2
解决办法
17万
查看次数

如何使用SQL Server检查目录是否存在?

我知道这个命令会创建一个目录:

EXEC master.sys.xp_create_subdir 'C:\testing\'
Run Code Online (Sandbox Code Playgroud)

但是如何检查'C:\ testing \'是否存在?

IF EXISTS(...
Run Code Online (Sandbox Code Playgroud)

sql sql-server directory xp-cmdshell

16
推荐指数
1
解决办法
2万
查看次数

从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)

sql-server stored-procedures xp-cmdshell

14
推荐指数
1
解决办法
5万
查看次数

调用exe退出后,xp_cmdshell挂起

我使用xp_cmdshell挂起问题.

  1. 调用可执行文件,执行其工作并退出.由于exe中的ui提示,它不会挂起.exe根本没有悬挂.exe从任务管理器中的进程列表中消失,并且来自exe的内部日志记录确认它执行了main函数中的最后一行

  2. 对xp_cmdshell的调用不会在SQL中返回控件.它挂在那一行(它是批处理的最后一行).杀死这个过程是无效的.它实际上需要重启sql server来摆脱挂起的进程(呃)

  3. 挂起仅在第一次运行时发生.只要第一个挂起,对具有相同参数的过程的后续调用就会正常工作并正确退出.重新启动SQL后,第一个后续调用将再次挂起.

  4. 如果它有任何区别,我试图从exe接收返回值 - 我的sql过程结束于:

    exec @i = xp_cmdshell @cmd; 回来@i;

  5. Activity Monitor报告的进程是停留在等待类型的PREEMPTIVE_OS_PROCESSOPS(其他开发人员看到的)或PREEMPTIVE_OS_PIPEOPS(我在当前测试中看到的)

有任何想法吗?

xp-cmdshell sql-server-2008

6
推荐指数
2
解决办法
8832
查看次数

SQL Server执行xp_cmdshell以从UNIX框中通过FTP协议导入文本文件

过去,我在SQL Server中使用xp_cmdshell来调用BCP实用程序,以便在两台Windows机器之间将文本文件导入SQL Server上的表中.这两台计算机位于同一个域,无需密码(因为SQL Server命令使用的是受信任/密码较少的连接).这是通过设置源计算机的目录来完成的,以使文件继承目标计算机所属的组所有权.

我想知道,当使用相同的方法将文本文件从Solaris服务器导入到同一Windows服务器但是在不同的域上时,是否也可以这样做.

以下是我想要执行的存储过程:

DECLARE @CMD VARCHAR(6000), @SystemCode INT;
DECLARE @ResultsFromCommand TABLE(SystemMessage VARCHAR(500));

SELECT @Cmd ='bcp [Destination].dbo.AC_Test in "ftp://10.251.11.10/TestFile.txt" -c -F2 -r\n -t^| -Ssqldevelopment\sqldevelopment -T';

INSERT @ResultsFromCommand EXEC @SystemCode = MASTER.dbo.xp_cmdshell @Cmd;

SELECT * FROM @ResultsFromCommand;
Run Code Online (Sandbox Code Playgroud)

因为无法建立连接,我收到了SQL Native Error 0.

我想知道如果因为上次机器在同一个域上,我只需要放置目录"\ ftpprod\testserver\file.txt",这次域名不同我必须使用"ftp:\ 10.251. 11.10\TestFile.txt",这将使它变得不可能.

sql-server sftp solaris bcp xp-cmdshell

6
推荐指数
1
解决办法
1157
查看次数

在表更新触发器异步后从SQL Server运行控制台应用程序?

我无法找到解决问题的最佳方法,请记住,我愿意接受更好的方法来完成这项任务.

我需要做的是,在我的表中的行值更新后,我需要使用该表中的2个字段作为控制台应用程序的参数.现在我可以通过在表上设置触发器然后使用xp_cmdshell带参数运行应用程序来实现此目的.但是我需要异步执行此操作,因此我的存储过程在等待控制台应用程序完成时不会挂起.

也许我会以错误的方式解决这个问题.

我正在使用SQL Server 2008

编辑 - Andriy M的答案似乎是目前最好的,但正如评论中所述,我需要一种方法来实现"即时".是否可以从SP或触发器调用作业?或者可能是另一种获得类似结果的方法?

感谢大家的帮助.

编辑 - 我选择他回答下面因为它帮助我找到了更好的解决方案.我最终做的是创建一个工作,只是查询我的表与另一个跟踪更新的行.然后,当我有我需要更新的行时,我使用xp_cmdshell运行我的应用程序与指定的参数.到目前为止,这个解决方案似乎运作顺利.

sql sql-server xp-cmdshell

5
推荐指数
1
解决办法
7649
查看次数

从SQL Server创建zip文件

这是我用来创建.rar带有密码的文件的代码

DECLARE @source VARCHAR(1000),
        @destination VARCHAR(1000),
        @Command VARCHAR(1000)

SET @source = 'E:\Temp\testRar.txt'
SET @destination = 'E:\Temp\testRar.rar'

SET @Command = '"C:\Program Files\WinRAR\Rar.exe"  a -ep1 -pasd^ad ' +@destination+' '+@source

EXEC MASTER..xp_cmdshell @Command
Run Code Online (Sandbox Code Playgroud)

但是它设置asdad密码而不是密码asd^ad^符号将被忽略。为什么?

sql sql-server sqlcmd xp-cmdshell

5
推荐指数
1
解决办法
8231
查看次数

如何通过MS SQL Server删除目录中的文件

我试图使用以下查询从Windows内的目录中删除文件,

exec xp_cmdshell 'del "C:\root\sfd_devtracker\'+@deletefile + '"';
Run Code Online (Sandbox Code Playgroud)

当我执行此命令时,它会给出以下错误,

Incorrect syntax near '+'.
Run Code Online (Sandbox Code Playgroud)

@deletefile变量中我有我必须删除的文件名.我在这里做错了什么?

sql sql-server xp-cmdshell

5
推荐指数
1
解决办法
2万
查看次数

SQL Server 2014:对 xp_cmdshell 代理帐户使用 gMSA?

我们正在运行 SQL Server 2014。我们希望使用 gMSA 作为 xp_cmdshell 的代理帐户。

我尝试运行以下命令:

EXEC sys.sp_xp_cmdshell_proxy_account 'gmsaNameGoesHere$', ''
Run Code Online (Sandbox Code Playgroud)

但是,它需要密码。

我尝试运行以下命令:

CREATE CREDENTIAL ##xp_cmdshell_proxy_account## WITH IDENTITY = 'gmsaNameGoesHere$'
Run Code Online (Sandbox Code Playgroud)

它运行了!但是,当用户尝试通过代理帐户运行 xp_cmdshell 时,他们会被告知:

消息 15153,级别 16,状态 1,过程 xp_cmdshell,第 3 行 xp_cmdshell 代理帐户信息无法检索或无效。验证“##xp_cmdshell_proxy_account##”凭据是否存在并包含有效信息。

是否可以在 SQL Server 2014 中使用 gMSA 作为 xp_cmdshell 的代理帐户?如果是这样,如何将其设置为代理帐户?

谢谢!

sql sql-server xp-cmdshell sql-server-2014

5
推荐指数
0
解决办法
417
查看次数