SQL调用xp_cmdshell拼接变量执行WinRAR压缩报+号语法错误
问题原因
SQL Server 中 EXEC 语句不支持直接在参数位置进行字符串拼接操作,你直接将带+的拼接表达式作为入参传给xp_cmdshell,会触发语法解析错误,这就是报错指向+位置的核心原因,并非引号转义问题。
解决方法
先将完整的待执行命令拼接为一个独立的字符串变量,再将该变量作为入参传给xp_cmdshell即可,修正后代码如下:
DECLARE @Imagename NVARCHAR(4000) DECLARE @cmd NVARCHAR(4000) -- 存储完整的命令字符串 SET @Imagename = '343434' -- 先完成所有字符串拼接 SET @cmd = '"C:\Program Files\WinRAR\Rar.exe" a -ep1 "D:\PO_PICKUP\'+ @Imagename +'.ZIP" "D:\PO_PICKUP\'+ @Imagename +'.csv" "D:\PO_PICKUP\'+ @Imagename +'.pdf"' -- 传入拼接好的变量执行 EXEC master.dbo.xp_cmdshell @cmd
如果需要校验拼接结果是否正确,可以在执行前添加PRINT @cmd语句,将输出的命令和你可用的静态代码比对即可。
内容的提问来源于stack exchange,提问作者JCW
相关产品推荐
相关产品推荐

