#batch-file #bcp #sqlcmd
#пакетный файл #bcp #sqlcmd
Вопрос:
У меня есть пакетный файл, который извлекает одну строку из базы данных и использует эти данные в качестве переменной, чтобы использовать значение в качестве имени файла, и экспортирует данные в виде текстового файла.
Это работает нормально, за исключением экспорта двух текстовых файлов. Один из двух файлов является правильным файлом. Другой — ненужный файл. Имя файла «.txt» и содержит те же данные, что и первое.
Вот мой bat-файл:
SET SQLCMD=sqlcmd -S server -d db -Q "set NOCOUNT
on; select name from t1" -h-1
FOR /F "usebackq delims=, tokens=1" %%i IN (`%SQLCMD%`) DO (
CALL :PROCESSING %%i
)
:PROCESSING
SET COL1=%1
bcp "SELECT * FROM t1" queryout "C:Export%COL1%.txt." -S server -T -c
Что мне нужно исправить, чтобы получить только один файл?
Поскольку я новичок в программировании, если кто-нибудь мог бы помочь, я был бы очень признателен.
Спасибо,
Комментарии:
1. Это действительно должно читаться как,
"C:Export%COL1%.txt."
?2. Попробуйте
Goto :eof
после закрывающих скобок. СмотритеGoto /?
иcall /?
. Вы выполняете свою команду дополнительное время после выхода из цикла.3. @Noodles Это сработало! Большое вам спасибо. Что делают Goto /? и call /??? Куда мне поместить их в bat-файл? Не могли бы вы объяснить? Я зашел в Google, но не смог получить то, что они делают. Извините, я ничего не знаю : (
4. @Compo разве это не предполагается? Не могли бы вы объяснить, почему вы это сказали, пожалуйста?
5. Да, вы можете изменить
call :processing %%i
строку наbcp "SELECT * FROM t1" queryout "C:Export%%i.txt." -S server -T -c
и просто полностью удалить раздел обработки