繁体   English   中英

BCP在输出中增加空间

[英]BCP Adds Space In Output

该BCP语句在我的数据之间添加了一个空格。 看图片 问题

这是DDL和样本数据-我需要更改什么以便不增加空间? (空列)

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

该脚本有2个问题。

首先,不能将表变量与BCP一起使用。 BCP是连接到SQL Server的独立可执行文件,因此它无法访问变量。 对于BCP,您必须使用常规表或全局临时表。 我已将您的脚本更改为使用全局临时表。

其次,在您的SQL查询中,您有[Inventorycode]字段,该字段不在TestMe表中。 我删除了它并添加了缺少的field17。

解决了这些问题后,我能够运行脚本,产生不带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"

使用下面的代码。

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