2013-06-09 1 views
2

Я просмотрел StackOverflow в течение нескольких часов и пробовал разные предложения по подобным вопросам, но до сих пор ничего не передавалось параметров (двойные кавычки, ^).с использованием sqlcmd в пакетном файле

Вот короткая версия этого:

@echo off 
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\ 
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P [email protected] -i C:\query.sql -s"," | findstr /V /C:"-" /B >c:\output.csv 

В принципе, я хочу, чтобы пройти довольно длинный параметр, содержащий разделители. Но единственный способ увидеть это - использовать аргументы. Я хотел бы сохранить его максимально простым. Это единственный выход? Можете ли вы предложить пример того, как это может работать?

Заранее спасибо.

+0

забыл упомянуть очевидное: из командной строки исполняемый файл sqlcmd с параметрами работает нормально. –

+0

Не могли бы вы объяснить, ясно, что случилось? – Endoro

+0

Endoro, dbenham ответил с комментариями о моем простом надзоре. –

ответ

2

Я не уверен, если это важно, но я думаю, что должно быть пространство между -s и ","

Но что еще более важно, ваша конструкция трубы является неправильным. Ваша команда sqlcmd запущена в новом окне, но ваша труба ищет выход из команды START в исходном окне - и ее нет.

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

@echo off 
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\ 
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P [email protected] -i "C:\query.sql" -s "," ^| findstr /V /C:"-" /B ^>"c:\output.csv" 

Но нет необходимости использовать СНВ. Ваш скрипт может просто выполнить sqlcmd напрямую, и все намного проще.

@echo off 
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\ 
sqlcmd.exe -S DBserverName -U username -P [email protected] -i "C:\query.sql" -s "," | findstr /V /C:"-" /B >"c:\output.csv" 

Возможно, у вас могут возникнуть проблемы с вашим паролем, в зависимости от того, какие символы используются. Возможно, вам придется указывать и/или избегать пароля, и sqlcmd.exe может иметь свои собственные правила эвакуации. Если да, то вам, возможно, придется беспокоиться об экранировании как для cmd.exe, так и для sqlcmd.exe.

+0

Не могу поверить, что я застрял в идее запустить его с запуском (ошибка ID10T, я думаю). Исправлено прямо в соответствии с 2-м предложением, и оно отлично работало. Еще раз спасибо. –

0

Эта строка должна иметь двойные кавычки по всему пути, в некоторых случаях это имеет значение.

cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\

и команда пуска необходимо двойные кавычки в начале, потому что он принимает первый набор в качестве заголовка окна.

start "" /w .... 
+0

Я не верю, что порядок переключения/названия для команды «Пуск» имеет значение, но ответ dbenham работал нормально. Спасибо за ввод. –

+0

Я не заметил, что первый цитируемый раздел был заголовком. Моя вина. – foxidrive