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

尖叫猫头鹰

我有一个查询,正在使用该查询为另一个程序创建输入文件。我正在尝试使用bcp实用工具通过使用system命令的R脚本来执行该过程。查询如下(使用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消息的错误。似乎有什么不对吗?

所罗门·鲁兹基(Solomon Rutzky)

看来您有几个问题:

  • 您正在将字符串与数字连接起来(即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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章