2016-11-04 1 views
0

이 BCP 선언문은 제 데이터 사이에 공백을 추가하고 있습니다. 이미지보기 IssueBCP 출력 공간을 추가합니다.

이것은 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 = '''[email protected]+'''" queryout "' 
SET @sql = @sql + @filename + '" -c -t, -T -S '[email protected]@SERVERNAME 
exec master..xp_cmdshell @sql 

답변

0

스크립트에 2 가지 문제점이 있습니다.

먼저 BCP에서 테이블 변수를 사용할 수 없습니다. BCP는 SQL 서버에 연결하는 독립 실행 형 실행 파일이므로 변수에 액세스 할 수 없습니다. BCP를 사용하면 일반 테이블이나 글로벌 임시 테이블을 사용해야합니다. 글로벌 임시 테이블을 사용하도록 스크립트를 변경했습니다.

둘째, SQL 쿼리에서 [TestMe] 테이블에없는 [인벤토리 코드] 필드가 있습니다. 나는 그것을 제거하고 실종 된 field17을 추가했다. 아래

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 = '''[email protected]+'''" queryout "' 
SET @sql = @sql + @filename + '" -c -t, -T -S '[email protected]@SERVERNAME 
exec master..xp_cmdshell @sql  
관련 문제