Что не так с этой утилитой bcp? - PullRequest
2 голосов
/ 23 сентября 2010

Я пытаюсь экспортировать данные в текстовый файл с помощью утилиты bcp? Я не мог понять, что я делаю здесь неправильно: -

Declare @Cmd nvarchar(1000)
Declare @Query nvarchar(1000)
Declare @Path nvarchar(500)
Declare @ServerName nvarchar(500)
Declare @UserName nvarchar(50)
Declare @Password nvarchar(50)
Declare @Delimiter char(1)

SET @Path = 'c:\abc.txt'
SET @ServerName = '10.10.10.10\instance1'
Set @UserName = 'sa'
Set @Password = '123456'
Set @Delimiter = '!'

SET @Query = 'SELECT [ID]
          , NULL
          ,[NAME]
          ,[STREET1] + '' '' + [STREET2] as [Address]
          ,[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City
          ,[PHONE] 
          ,[FAX]
          ,''Title'' as [Title]
          ,[Country]
FROM [temp01]'
SET @Cmd = 'bcp "' + @Query + '" queryout "' +  @Path +
         '" -c -S' + @ServerName + ' -U' + @UserName + ' -P' + 
        @Password + ' -t' + @Delimiter + ''
EXEC master..xp_cmdshell @Cmd

Это не запись каких-либо данных в файл. В окне результатов я получаю этот вывод: -

использование: bcp {dbtable | запрос} {в | вне | запрос | формат} файл данных [-m maxerrors] [-f файл-формата] [-e файл-ошибки] [-F firstrow] [-L lastrow] [-b batchsize] [-n собственный тип] [-c тип символа] [-w широкий тип символа] [-N сохранить нетекстовый нативный язык] [-V версия формата файла] [-q заключенный в кавычки идентификатор] [-C спецификатор кодовой страницы] [-t терминатор поля] [-r терминатор строки] [-i входной файл] [-о выходной файл] [-а размер пакета] [-S имя сервера] [-U имя пользователя] [-P пароль] [-T доверенное соединение] [-v версия] [-R региональное включение] [-k сохранить нулевые значения] [-E сохранить идентичные значения] [-h "загрузить подсказки"] НОЛЬ [-h «загрузить подсказки»] NULL

Пожалуйста, помогите.

Ответы [ 5 ]

6 голосов
/ 02 августа 2012

Этот вопрос довольно старый, но у меня была такая же проблема. Вся команда должна находиться в одной строке. Удалите все разрывы строк в @Query и @ Cmd.

2 голосов
/ 23 сентября 2010

Я думаю, вам нужен пробел после вашего -S переключателя. Кроме того, в общем случае при отладке чего-либо сложного уменьшайте сложность, пока не сможете определить, в чем проблема. В этом случае вы можете удалить каждый переключатель по одному (или удалить все из них для запуска), чтобы определить, является ли это причиной проблемы.

1 голос
/ 01 апреля 2015

SET @Cmd = 'bcp "' + ЗАМЕНИТЬ (ЗАМЕНИТЬ (ЗАМЕНИТЬ (, CHAR (9), CHAR (32)), CHAR (13), CHAR (32)), CHAR (10), '') @ Query + '"queryout"' + @Path + '"-c -S' + @ServerName + '-U' + @UserName + '-P' + @Password + '-t' + @Delimiter + ''

0 голосов
/ 13 октября 2016

Я обнаружил ту же проблему при попытке в моей базе данных, Отсюда я пришел к выводу, что Вы используете

SET @Query = 'SELECT [ID]
           , NULL
           ,[NAME]
           ,[STREET1] + '' '' + [STREET2] as [Address]
           ,[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City
           ,[PHONE] 
           ,[FAX]
           ,''Title'' as [Title]
           ,[Country] FROM [temp01]'

Если вы используете

SET @Query = 'SELECT [ID], NULL ,[NAME],[STREET1] + '' '' + [STREET2] as [Address],[CITY] + '' '' + [PROVINCE] + '' '' + [POSTAL] as City,[PHONE],[FAX],''Title'' as [Title],[Country] FROM [temp01]'

будет работать без новой строки в запросе Просто потому, что он не принимает Пространство между ними.

Спасибо

0 голосов
/ 24 сентября 2010

Вы должны предоставить базу данных.Вы только определили экземпляр таблицы, но не базы данных.попробуйте изменить своих избранных государственных деятелей, например: ... из [yourDB]. [temp01] ...

...