2015-01-23 2 views
0

Пожалуйста, кто-нибудь может посоветовать, существует ли способ, который может использоваться для остановки команды массового копирования SQL Server BCP, создающей окончательный возврат каретки и, следовательно, пустую строку в конце файла?SQl Server 2014 BCP BulkCopy удаляет финальную пустую строку

Я был Google, но не смог нанести подходящий ответ.

Код, который я использовал в моей хранимой процедуре, приведен ниже. Запрос и путь к файлу опущены, но переменные SQL остаются:

/* Prepare the command */ 
    DECLARE @Command VARCHAR(4000); 
    SELECT @Command = 
       'bcp "'    /* Bulk Copy command */ 
    +   @Query    /* The query to output */ 
    +   '" queryout '  /* Output the results of the query */ 
    +   @FullFilePath  /* The file path to write to */ 
    +   ' -c -t"|" -T -S' /* Switches (See below) */ 
    +   @@servername;  /* The server name */ 


    /* 
     BCP Command Swtitches 
      -c Output in ASCII with the default field terminator (tab) and row terminator (crlf) 
      -t override the field terminator with "|" 
      -T use a trusted connection. Note that U –P may be used for username/password 
      -S connect to this server to execute the command 
    */ 

    /* Execute the command */ 
    exec master..xp_cmdshell @Command; 

Спасибо.

ответ

1

Я сражалась то же самое, и единственным способом, которым я мог бы исправить это НЕ ИСПОЛЬЗОВАТЬобычай -t/т колонок разделителя в запросе БКПА в первую очередь.

Так мой первоначальный экспорт BCP синтаксис:

bcp "select 1 from [myDB].[dbo].[db_status] WHERE db_idx = 0" queryout c:\db_migration_log.txt -c -t/t -S127.0.0.1,2044 -Uuser -Ppassword 

пришлось изменить на:

bcp "select 1 from [myDB].[dbo].[db_status] WHERE db_idx = 0" queryout c:\db_migration_log.txt -c -S127.0.0.1,2044 -Uuser -Ppassword 

Тогда мой запрос импорта работал нормально (не обращая внимания на последнюю строку) следующим образом:

SET QUOTED IDENTIFIER OFF 
SET NOCOUNT ON 
BULK INSERT [myDB].[dbo].[mayTable] FROM 'c:\myfile.csv' 
WITH 
(
FIELDTERMINATOR = '\t', 
ROWTERMINATOR = '\n' 
) 
+0

Отлично, выглядит многообещающе. Если я когда-нибудь перейду к рассмотрению этого проекта, я буду помнить о вашем решении! Спасибо. – Dib

+1

..также я заметил, что для некоторых файлов с двоичными данными выше не удается, поэтому в этом случае я использую export/import с параметром -n и -t/t для тех случаев, когда появляется ошибка EOL. – Milan

+0

Благодарим за обновление. Я тоже это помню. – Dib