Подтвердить что ты не робот

Могу ли я указать входной файл sql с bcp?

Как я могу указать входной файл sql с длинным запросом при использовании bcp? Я попытался использовать параметр -i, но он продолжает жаловаться на ошибку в командной строке без дополнительной информации. Возможно ли это?

4b9b3361

Ответ 1

Насколько мне известно, утилита BCP поддерживает только запросы Transact-SQL, непосредственно написанные в командной строке. Пример:

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

В соответствии с его ссылкой параметр -i:

Задает имя файла ответа, содержащего ответы на вопросы командной строки для каждого поля данных, когда массовая копия выполняется с использованием интерактивного режима (-n, -c, -w или -N не указывается).

Обратите внимание, что он отличается от sqlcmd Utility "-i":

Идентифицирует файл, содержащий пакет SQL-запросов или хранимых процедур. Можно указать несколько файлов, которые будут считаться и обрабатываться в порядке (...)

Ответ 2

У меня была эта проблема сегодня и нашел удобное обходное решение, по крайней мере, в ситуации ad-hoc.

Временные таблицы могут быть созданы любым пользователем с разрешениями на подключение. Это означает, что вы также можете создавать глобальные временные таблицы.

Просто запустите свой запрос в менеджере предприятия (или sql cmd или что-то еще), используя SELECT... INTO с глобальной временной таблицей, например.

SELECT * 
INTO ##mytemptable
FROM SomeTable 
WHERE [massive where clause, for example] 

Затем вы можете использовать временную таблицу в запросе BCP с помощью простого

SELECT * FROM ##mytemptable

Затем отпустите таблицу temp через менеджер предприятия

DROP TABLE ##mytemptable

Ответ 3

Я сделал другой способ для исправления.

Я создаю командный файл, который читает файл и отправляет ваше содержимое в команду bcp. См:

@ECHO off

SETLOCAL EnableDelayedExpansion

SET queryFile=%1
SET outFileName=%2

FOR /F "delims=" %%i IN (%queryFile%) DO SET join=!join! %%i

ECHO %join%

bcp "%join%" queryout %outFileName% /S.\SQLE_CAESAR /d /c /t"|" /T

Чтобы script получили два параметра:

  • Имя файла, у которого есть запрос;
  • Имя файла для данных экспорта;

Выполнить a script в cmd следующим образом: export-query.bat query.sql export.txt

Я надеюсь, что помог.

Ответ 4

Многострочные запросы могут быть легко переданы в bcp с помощью powershell:

PS> $query = @'
    select * 
    from <table>
'@
PS> bcp $query queryout <outfile> -d <database> -T -S <server> -c

Ответ 5

У меня была такая же проблема, возможно, не очень хороший подход. Тем не менее, я сделал что-то вроде следующего

bcp "declare @query nvarchar(max)  set @query = (SELECT * FROM OPENROWSET(BULK 'F:\tasks\report_v2.sql', SINGLE_CLOB) AS Contents) exec sp_executesql @query" queryout %outFileName%  /c /C RAW -S . -U sa -P 123 -d blog /T

И я должен сказать, что если вы используете как глобальную временную таблицу, то глобальная временная таблица сама отбрасывается после выполнения запроса. Вы не можете использовать это в некоторых ситуациях

Ответ 6

пытаться:

query=$( cat < /file.sql )
export query
bcp "${query}" queryout /home/file.csv