在SQL Server 2012中使用格式提取CSV文件

时间:2015-12-16 07:20:10

标签: sql-server format export-to-csv

我想从SQL Server中提取CSV文件,我设法使用以下代码执行此操作:

DECLARE @bcpCommand1 VARCHAR(2000) 
SET @bcpCommand1 = 'bcp " SELECT * from ##tblUser " queryout' 
SET @bcpCommand1 = @bcpCommand1 + ' C:\OutPut\CSV\My_Output.csv -c -w -T -S197.1.1.1 -Umyuser -Pmypwd","-CRAW'  

EXEC CPS..xp_cmdshell @bcpCommand1 

但问题是......

  1. 大整数值会自动转换为CSV中的科学记数法。而不是我想要显示所有数字。

  2. 我希望将日期显示为' 01-Dec-2015 11:20 AM'。

  3. 如果任何数据包含逗号,则数据将拆分为下一列。例如,名字是" mohan,Raj"然后,.csv数据Mohan位于一列中,raj位于另一列中。如何避免?

  4. 有没有办法使用格式文件提取.csv。怎么做?

  5. 有没有办法做到这一点?请帮我解决这个问题并发布代码。

2 个答案:

答案 0 :(得分:0)

BCP用于将表中的任何内容复制到csv或txt或xml格式。 如果要将一列中的逗号分隔值作为csv中的多列。然后你必须相应地修改临时表。

  1. 我希望将日期显示为' 01-Dec-2015 11:20 AM'。 没有直接转换为您的确切格式 您可以使用此代码执行相同的操作

     SELECT REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') +' '+STUFF(RIGHT( CONVERT(VARCHAR,GETDATE(),100 ) ,7), 6, 0, ' ')   
    
  2. 4)有没有办法使用格式文件提取csv。怎么做?

    sqlcmd -S MyServer -d myDB -E -Q"从SomeTable"中选择col1,col2,col3;                -o" MyData.csv" -h-1 -s"," -w 700

       -h-1 removes column name headers from the result
       -s"," sets the column seperator to , 
       -w 700 sets the row width to 700 chars 
    (this will need to be as wide as the longest row or it will wrap to the next line)
    

答案 1 :(得分:0)

第4个问题的答案(对问题1和2有帮助)。要在服务器上加载csv-data,您可以使用:

INSERT INTO dbo.YourTable
SELECT a.* FROM OPENROWSET( BULK 'D:\our.csv', FORMATFILE = 'D:\our.fmt') AS a;

our.fmt的样本(它描述了csv中字段的文件)

9.0
4
1  SQLCHAR  0  50 ";"        1  Field1                SQL_Latin1_General_Cp437_BIN
2  SQLCHAR  0  50 ";"        2  Field2                SQL_Latin1_General_Cp437_BIN
3  SQLCHAR  0  50 ";"        3  Field3                SQL_Latin1_General_Cp437_BIN
4  SQLCHAR  0  500 "\r\n"      4  Field4        SQL_Latin1_General_Cp437_BIN

您可以找到*.fmt here的说明。