xp_cmdshell 并在 sql 服务器触发器中回显
xp_cmdshell and echo in sql server trigger
我正在尝试将一些数据和固定字符从 SQL 服务器 table 导出到文本文件。我需要将大量这样的行导出到文本文件中,因此我试图通过将它们放在一行中来减少声明和设置大量命令变量(这将极大地减少代码大小)。这是我正在尝试做的事情:
这很好用:
DECLARE @ClientID varchar(50)
SET @ClientID = (select ClientID from inserted)
DECLARE @CommandL1 varchar(512)
SET @CommandL1 = 'echo U1 '+@ClientID+'> c:\temp\file.txt'
exec master..xp_cmdshell @CommandL1
与上面完全相同的命令但写成一行(没有 DECLARE 和 SET,减少代码的首选方法)失败(我收到错误 - (第一个)'+' 附近的语法不正确):
exec master..xp_cmdshell 'echo U1 '+@ClientID+'> c:\temp\file.txt' --ERROR
我有很多类似上面的代码,想精简一下。此外,我想知道如何解决这个问题。提前感谢您的帮助(我尝试使用 ^ 作为转义字符,但没有成功)。如何更改第二行(如上所示带有 --ERROR)以使其正常工作?
Jd
根据 MSDN,您必须在动态 SQL 中保留该语句,这样命令 shell 就不会读取
exec master..xp_cmdshell 'echo U1 '+@ClientID+'> c:\temp\file.txt'
作为
echo U1 + @ClientID + '> c:\temp\file.txt'
xp_cmdshell
接受一个字符串参数,因此您需要像开始时那样先显式构建字符串。该参数在 + 之前的结束引号之后终止,因此 + 是一个语法错误,因为 xp_cmdshell
除了 NO_OUTPUT
作为可选参数之外,不期望在字符串参数之后有任何内容。因此它将您的 + 解释为不正确的参数。
我正在尝试将一些数据和固定字符从 SQL 服务器 table 导出到文本文件。我需要将大量这样的行导出到文本文件中,因此我试图通过将它们放在一行中来减少声明和设置大量命令变量(这将极大地减少代码大小)。这是我正在尝试做的事情:
这很好用:
DECLARE @ClientID varchar(50)
SET @ClientID = (select ClientID from inserted)
DECLARE @CommandL1 varchar(512)
SET @CommandL1 = 'echo U1 '+@ClientID+'> c:\temp\file.txt'
exec master..xp_cmdshell @CommandL1
与上面完全相同的命令但写成一行(没有 DECLARE 和 SET,减少代码的首选方法)失败(我收到错误 - (第一个)'+' 附近的语法不正确):
exec master..xp_cmdshell 'echo U1 '+@ClientID+'> c:\temp\file.txt' --ERROR
我有很多类似上面的代码,想精简一下。此外,我想知道如何解决这个问题。提前感谢您的帮助(我尝试使用 ^ 作为转义字符,但没有成功)。如何更改第二行(如上所示带有 --ERROR)以使其正常工作?
Jd
根据 MSDN,您必须在动态 SQL 中保留该语句,这样命令 shell 就不会读取
exec master..xp_cmdshell 'echo U1 '+@ClientID+'> c:\temp\file.txt'
作为
echo U1 + @ClientID + '> c:\temp\file.txt'
xp_cmdshell
接受一个字符串参数,因此您需要像开始时那样先显式构建字符串。该参数在 + 之前的结束引号之后终止,因此 + 是一个语法错误,因为 xp_cmdshell
除了 NO_OUTPUT
作为可选参数之外,不期望在字符串参数之后有任何内容。因此它将您的 + 解释为不正确的参数。