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

时间:2015-01-22 22:54:19

标签: sql-server r bcp

我有一个查询,我用它来为另一个程序创建输入文件。我尝试使用系统命令通过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消息的错误。好像什么都没关系?

1 个答案:

答案 0 :(得分:2)

看起来你有一些问题:

  • 您正在使用数字连接字符串(即CASE返回一个数字,但它正在与其他内容连接)
  • END声明的CASE后面有一个无关的逗号
  • 而且我不知道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')