Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在xp#u cmdshell中执行exe文件不会';行不通_Sql Server_Xp Cmdshell - Fatal编程技术网

Sql server 在xp#u cmdshell中执行exe文件不会';行不通

Sql server 在xp#u cmdshell中执行exe文件不会';行不通,sql-server,xp-cmdshell,Sql Server,Xp Cmdshell,我在SQL Server中创建了一个用户,该用户具有: CREATE LOGIN adminuser WITH PASSWORD = 'ABCDegf123'; GO EXEC master..sp_addsrvrolemember @loginame = N'adminuser', @rolename = N'sysadmin' GO 然后我连接了这个用户 我想做的是触发这个ftp命令: ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt 所

我在SQL Server中创建了一个用户,该用户具有:

CREATE LOGIN adminuser WITH PASSWORD = 'ABCDegf123';
GO

EXEC master..sp_addsrvrolemember @loginame = N'adminuser', @rolename = N'sysadmin'
GO
然后我连接了这个用户

我想做的是触发这个ftp命令:

ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt
所以我创造了一个触发器:

CREATE TRIGGER sss14
ON Table_1
AFTER INSERT
AS 
    DECLARE @CMDSQL VARCHAR(1000)
    SET @CMDSQL = 'ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt'
    EXEC master..xp_cmdshell @CMDSQL
然而,这不起作用


请注意,使用
xp\u cmdshell
创建文件夹可以正常工作。当我运行“代码”时,它将VisualStudio代码作为后台进程

,当调用xp*CMdS壳时,SQLServer不关心输出,不考虑任何失败。 但是,您可以将输出插入临时表并查看结果。请在SSMS中运行以下内容进行检查

DECLARE @CMDSQL VARCHAR(1000)
    SET @CMDSQL = 'ftp -s:C:\Users\sss\Documents\script_ftp\ftp.txt'
    create table #output(output varchar(2000)) 

    insert into  #output
    Exec master..xp_cmdshell @CMDSQL

    select * from #output 
    drop table #output 

使用xp_cmdshell运行的命令使用SQL Server服务帐户运行操作系统命令。请检查SQL Server服务帐户是否具有执行ftp的权限。如果没有,请授予相应的权限

你的错误是?我是ms sql的新手,你能告诉我什么时候可以找到错误吗?正确的是在结果或消息下。SIT告诉我cmd的执行成功,但是,如果我启动visual studio代码,例如:SET@CMDSQL='code',它不会在触发器中启动
xp\u cmdshell
,执行FTP是一个非常糟糕的主意--很难排除故障,很难维护,性能很差,并发性不好。考虑从客户端代码中执行此操作。使用触发器在ServiceBroker队列中写入一个条目,以及从该队列读取请求并在必要时调用FTP的单独应用程序或服务。或者使用作业或计划任务。thnks,对于我正在使用SSMS的响应,如何查看表输出?不推荐使用从
SELECT
中的触发器返回数据。虽然现在可以使用,但在SQL Server的未来版本中不会使用。我使用的是新版本的ms SQL,这可能是我没有看到任何结果的原因。现在仍然不推荐使用:我修改了答案。请使用相同的登录名在SSMS中运行以了解结果。