我想从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
但问题是......
大整数值会自动转换为CSV中的科学记数法。而不是我想要显示所有数字。
我希望将日期显示为' 01-Dec-2015 11:20 AM'。
如果任何数据包含逗号,则数据将拆分为下一列。例如,名字是" mohan,Raj"然后,.csv
数据Mohan
位于一列中,raj
位于另一列中。如何避免?
有没有办法使用格式文件提取.csv
。怎么做?
有没有办法做到这一点?请帮我解决这个问题并发布代码。
答案 0 :(得分:0)
BCP用于将表中的任何内容复制到csv或txt或xml格式。 如果要将一列中的逗号分隔值作为csv中的多列。然后你必须相应地修改临时表。
我希望将日期显示为' 01-Dec-2015 11:20 AM'。 没有直接转换为您的确切格式 您可以使用此代码执行相同的操作
SELECT REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') +' '+STUFF(RIGHT( CONVERT(VARCHAR,GETDATE(),100 ) ,7), 6, 0, ' ')
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的说明。