如何使用bcp将SQL数据导出为CSV?

7
我使用简单的代码。
declare @sql varchar(8000) 
select @sql  = 'bcp ExcelAnalysis.dbo.ClearDB out c:\csv\comm.txt -c -t, -T -S '+ @@servername 
exec master..xp_cmdshell @sql 

但是这段代码会导出整个表格,而我只需要一些特定的字段和条件,比如:
declare @sql varchar(8000) 
select @sql = 'bcp 
SELECT 

      ,[vl]
      ,[data]
      ,[URL]
      ,[parse]
      ,[Strata]
      ,[Id]
   FROM [ExcelAnalysis].[dbo].[ClearDB] where [data]> "01.05.2017" and NOT [vl] ="mag"and NOT [vl] ="Maxximo"   out c:\csv\status.txt -c -t, -T -S '+ @@servername 
exec master..xp_cmdshell @sql 

但是如果我使用任何字段,bcd会返回带有语法错误的消息。如何纠正?

2
在视图中创建查询并将其用作数据库对象。 - Ven
1
可以给我展示一下吗?我不知道,我是新手。 - psysky
2个回答

10

第一部分:在数据库中创建一个视图,第二部分执行语句将结果导出为CSV文件。如果需要更多帮助,请告诉我。

use [ExcelAnalysis].
go
;

create view [dbo].[vw_ClearDB] as
SELECT 

      [vl]
      ,[data]
      ,[URL]
      ,[parse]
      ,[Strata]
      ,[Id]
   FROM [dbo].[ClearDB] where [data]> "01.05.2017" and NOT [vl] ='magand'
   NOT [vl] ='Maxximo'

   GO

   ;


declare @sql varchar(8000) 
select @sql  = 'bcp ExcelAnalysis.dbo.vw_ClearDB out c:\csv\comm.txt -c -t, -T -S '+ @@servername 
exec master..xp_cmdshell @sql

1
你能告诉我,我做了和你一样的事情,但是出现了错误'Message 102, level 15, state 1, procedure vw_ClearDB, line 29 Wrong syntax near the "GO" structure.'。 - psysky
1
将查询直接输入为第一个 BCP 参数,queryout 作为第二个参数。 - Dan Guzman
1
对于视图方法,请使用单引号而不是双引号来括起字符串字面值。 - Dan Guzman
1
我明白了。分号必须在查询语句之后,GO之前。谢谢。 - psysky
1
希望问题已经解决了,@D.Joe。很抱歉现在才看到你的消息,服务器上的智能感应应该会自己解决。 - Ven

6

Bcp 应该使用 queryout 选项。

语法如下:

SET @sql = 'bcp "SELECT [vl]
            ,[data]
            ,[URL]
            ,[parse]
            ,[Strata]
            ,[Id]
        FROM [dbo].[ClearDB] 
        WHERE [data] > ''01.05.2017''
        AND NOT [vl] =''mag''
        AND NOT [vl] =''Maxximo''" 
    queryout c:\csv\comm.txt
    -c -t, -T -S '+ @@servername + '\' + @@servicename

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接