2014-04-22 26 views
5

Potrzebuję BCP tabeli w pliku rozdzielanym tabulatorami, ale potrzebuję nazw kolumn w pierwszym rekordzie tabeli. Pytanie 1: Czy mam rację, że BCP nie ma do tego przełącznika? Pytanie 2: Jeśli nie, dlaczego?Uzyskiwanie nazw kolumn z zapytaniem BCP

Starałem się wykonać następujące czynności:

BCP "declare @colnames varchar(max); select @colnames=coalesce (@colnames+char(9), '') 
+ Column_Name from db.information_Schema.columns where table_name='table1' order by 
ordinal_position; select @colnames" queryout Table1_Columns.tsv -S?? -U?? -P?? -f** -e** 

Plik formatu wygląda następująco:

9.0 
1 
1 SQLCHAR 0 100 "\r\n" 1 Column_Names SQL_Latin1_General_CP1_CI_AS 

To dostaje mi plik z nazwami kolumn, a potem drugie polecenie BCP robi mi się plik danych, a ja po prostu kopiuję DOS razem. Pytanie 3: Czy jestem sprytny czy co? Pytanie 4: Dlaczego to nie działa? I pojawia się błąd:

SQLState = S1000, NativeError = 0 
Error = [Microsoft][SQL Native Client]Host-file columns may be skipped only when 
copying into the Server 

Odpowiedz

8

bcp nie obsługuje eksportowania nagłówki kolumn z danymi, jednak istnieją pewne obejścia, takie jak eksportuje nagłówki w osobnym pliku, a następnie łącząc obie te nagłówki i pliki danych, jak następuje:

exec master..xp_cmdshell 'BCP "select 'SETTINGS_ID','GROUP_NAME'" queryout d:\header.csv -c -T -t,' 

exec master..xp_cmdshell 'BCP "select SETTINGS_ID,GROUP_NAME from [DB]..[TABLE]" queryout "d:\columns.csv" -c -t, -T ' 

exec master..xp_cmdshell 'copy /b "d:\header.csv"+"d:\columns.csv" "d:/result.csv"' 

można również usunąć nieużywane pliki:

exec master..xp_cmdshell 'del "d:\header.csv"' 
exec master..xp_cmdshell 'del "d:\columns.csv"' 

Albo można połączyć wszystkie dane w widoku (dodawanie nagłówków) i wyeksportować go

+0

Pierwsza linia nie działa dla mnie: '" SETTINGS_ID "nie jest rozpoznawaną opcją". Jakaś wskazówka? –

+0

Musisz zastąpić go własnymi nagłówkami kolumn. –

+0

w jaki sposób można użyć polecenia kopiowania z lokalizacją jako parametrem? Przykład: 'EXEC master..xp_cmdshell 'copy/b"' + @OutputLocationHeader + '"+"' + @OutputLocationData + '"' '+ @OutputLocation +'" '' daje mi błąd przy pierwszym '+ 'znak – Stephanie

Powiązane problemy