Tsql 使用变量时bcp命令出现问题

Tsql 使用变量时bcp命令出现问题,tsql,Tsql,下面的bcp命令没有错误 exec master..xp_cmdshell 'bcp "select RecordType + PaymentYear from CentersApp.dbo.IRS_TRecord" queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT" -T -c -S SOLOMON' 但是,当我使用变量做同样的事情时(见下文),我得到的错误是“bcp”不被识别为内部或外部命令 declare @t n

下面的bcp命令没有错误

exec master..xp_cmdshell 'bcp "select RecordType + PaymentYear from   CentersApp.dbo.IRS_TRecord"     
queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT"  -T -c -S SOLOMON'
但是,当我使用变量做同样的事情时(见下文),我得到的错误是“bcp”不被识别为内部或外部命令

  declare @t nvarchar(200)
  declare @s nvarchar(1000)


   set @t = '"select RecordType + PaymentYear from CentersApp.dbo.IRS_TRecord"'
   set @s =  '''bcp ' + '"' +  @t + '"' +  '        queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT"  -T -c -S SOLOMON '''

   exec master..xp_cmdshell @s
改变

set @s =  '''bcp ' + '"' +  @t + '"' +  '        queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT"  -T -c -S SOLOMON '''


它存储在字符串变量类型中,因此您不需要使用引号

我建议在运行
xp\u cmdshell
之前运行
select@s
,以确保正确地生成字符串。如果看起来还可以,那么复制它并粘贴到第一个示例中,在这个示例中不使用变量来查看它是否返回错误。我已经这样做了。字符串看起来与第一个完全相同。是否尝试删除包装@s变量的引号?它已经是一个字符串,因此您不需要将它(即“bcp”+…)包装起来,因为它与您的问题没有直接关系,但我刚刚注意到变量
@t
的值以引号开始和结束。然后,在设置
@s
的值时,在前后添加了额外的引号。谢谢,是的,这是一组额外的双引号,我删除了它。不需要将“bcp”和“.”连接在一起。它们可以是同一字符串的一部分。对于“.”和“queryout…”也是如此。例如
set@s='bcp'+@t+''queryout'\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT“-t-c-s SOLOMON'
将提高可读性。谢谢,是的,这是一组额外的双引号,我删除了它。
set @s =  'bcp ' + '"' +  @t + '"' +  '        queryout "\\w2k3solomon\c$\IRS1099B\IRS_VENDORS.TXT"  -T -c -S SOLOMON '