将 SQL Server 2008 查询转换为 bcp 查询

Convert SQL Server 2008 query to bcp query

我有一个查询用于为另一个程序创建输入文件。我正在尝试使用系统命令通过 R 脚本使用 bcp 实用程序执行该过程。查询如下(使用SQL Server 2008 R2):

SELECT TOP 1000 
case when [click] = 1 then 1
else -1
end  
+  ' ' 
+ '|'
+ 'hr ' hour
, C1
from [mydb].[dbo].[table1]

当我尝试 运行 时,CMD 中的以下内容没问题:

C:\Users\me>bcp "SELECT top 1000 case when click = 1 then 1 else -1 end, + ' |hr ' hour, C1 from [mydb].[dbo].[table1]" queryout "C:\Users\
\me\Desktop\bcp_test.txt" -T -c -t

然而,当我使用它并尝试在 R 中 运行 它时,使用:

system('bcp "SELECT top 1000 case when click = 1 then 1 else -1 end, + ' |hr ' hour, C1 from [mydb].[dbo].[table1]" queryout "C:\Users\
    \me\Desktop\bcp_test.txt" -T -c -t')

我收到有关字符串常量和状态 1 消息的错误。有什么不对劲吗?

您似乎遇到了一些问题:

  • 您正在将字符串与数字连接起来(即 CASE returns 一个数字,但随后它与其他内容连接起来)
  • CASE 语句的 END 后面有一个多余的逗号
  • 而且我不知道 R 如何转义嵌入式引号,但您的主要问题在于 + ' |hr'
  • 的串联

假设 R 使用反斜杠转义嵌入的单引号,命令应该是:

system('bcp "SELECT TOP 1000 CASE WHEN [click] = 1 then \'1\' else \'-1\' END + \' |hr \' AS [hour], [C1] FROM [mydb].[dbo].[table1];" queryout "C:\Users\me\Desktop\bcp_test.txt" -T -c -t')