简体   繁体   English

BCP在输出中增加空间

[英]BCP Adds Space In Output

This BCP Statement is adding a space between my data. 该BCP语句在我的数据之间添加了一个空格。 See image 看图片 问题

This is DDL and sample data - what do I need to change so that the space is not added? 这是DDL和样本数据-我需要更改什么以便不增加空间? (Empty column) (空列)

Declare @TestMe Table
(
field1 varchar(20),
field2 varchar(20),
field3 varchar(20),
field4 varchar(20),
field5 varchar(20),
field6 varchar(20),
field7 varchar(20),
field8 varchar(20),
field9 varchar(20),
field10 varchar(20),
field11 varchar(20),
field12 varchar(20),
field13 varchar(20),
field14 varchar(20),
field15 varchar(20),
field16 varchar(20),
field17 varchar(20)
)

Insert Into @TestMe Values
('Blue', 'Red', NULL, NULL, NULL, NULL, 'Seven', 'Eight', NULL, NULL, Null, Null, 'Pink', 'Orange', 'NFL', 'Size', 'Last')

Declare @field1 varchar(20),@sql nvarchar(4000), @filename varchar(100)
Set @field1 = 'Blue'
Set @filename = 'C:\Test.csv'
Set @sql = 'bcp "SELECT ''one'',''two'',''three'',''four'',''five'',''six'',''seven'',''eight'',''nine'',''ten'',''eleven'',''twelve'',''thirteen'',''fourteen'',''fifteen'',''sixteen'',''seventeen'' UNION ALL SELECT CHAR(34)+CONVERT(varchar(10),[field1],101)+CHAR(34),CHAR(34)+CAST([field2] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field3] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field4] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field5] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field6] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field7] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field8] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field9] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field10] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field11] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field12] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field13] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field14] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field15] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([inventorycode] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field16] As VARCHAR(MAX))+CHAR(34) FROM [@TestMe] WHERE field1 = '''+@field1+'''" queryout "'
SET @sql = @sql + @filename + '" -c -t, -T -S '+@@SERVERNAME
exec master..xp_cmdshell @sql

There are 2 problems with the script. 该脚本有2个问题。

First, you cannot use table variable with BCP. 首先,不能将表变量与BCP一起使用。 BCP is a stand-alone executable connecting to SQL server, so it cannot access variables. BCP是连接到SQL Server的独立可执行文件,因此它无法访问变量。 With BCP you must use regular tables or global temporary tables. 对于BCP,您必须使用常规表或全局临时表。 I've changed your script to use global temporary table. 我已将您的脚本更改为使用全局临时表。

Second, in your SQL query you had [inventorycode] field which is not in TestMe table. 其次,在您的SQL查询中,您有[Inventorycode]字段,该字段不在TestMe表中。 I removed that and added field17 which was missing. 我删除了它并添加了缺少的field17。

After fixing these problems I was able to run the script producing an output without the gap column: 解决了这些问题后,我能够运行脚本,产生不带gap列的输出:

one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen
"Blue","Red",,,,,"Seven","Eight",,,,,"Pink","Orange","NFL","Size","Last"

Use code below. 使用下面的代码。

create table ##TestMe
(
field1 varchar(20),
field2 varchar(20),
field3 varchar(20),
field4 varchar(20),
field5 varchar(20),
field6 varchar(20),
field7 varchar(20),
field8 varchar(20),
field9 varchar(20),
field10 varchar(20),
field11 varchar(20),
field12 varchar(20),
field13 varchar(20),
field14 varchar(20),
field15 varchar(20),
field16 varchar(20),
field17 varchar(20)
)

Insert Into ##TestMe Values
('Blue', 'Red', NULL, NULL, NULL, NULL, 'Seven', 'Eight', NULL, NULL, Null, Null, 'Pink', 'Orange', 'NFL', 'Size', 'Last')

Declare @field1 varchar(20),@sql nvarchar(4000), @filename varchar(100)
Set @field1 = 'Blue'
Set @filename = 'c\Test.csv'
Set @sql = 'bcp "SELECT ''one'',''two'',''three'',''four'',''five'',''six'',''seven'',''eight'',''nine'',''ten'',''eleven'',''twelve'',''thirteen'',''fourteen'',''fifteen'',''sixteen'',''seventeen'' UNION ALL SELECT CHAR(34)+CONVERT(varchar(10),[field1],101)+CHAR(34),CHAR(34)+CAST([field2] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field3] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field4] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field5] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field6] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field7] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field8] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field9] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field10] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field11] As VARCHAR(MAX))+CHAR(34),CHAR(34) + CAST([field12] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field13] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field14] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field15] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field16] As VARCHAR(MAX))+CHAR(34),CHAR(34)+CAST([field17] As VARCHAR(MAX))+CHAR(34) FROM ##TestMe WHERE field1 = '''+@field1+'''" queryout "'
SET @sql = @sql + @filename + '" -c -t, -T -S '+@@SERVERNAME
exec master..xp_cmdshell @sql    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM