Вот простой пример, в котором решена основная проблема и удалена специфика вашего фактического запроса.
Я удалил команду, чтобы изменить приглашение Windows, и команду, чтобы отключить эхо, так как они просто использовались для украшения вывода, а не для решения. Я также использовал подчеркивание в приглашении ввода данных, где у вас обычно был бы пробел, чтобы вы могли его увидеть. Я оставил pause
в конце файла bat, который необходим только для просмотра выходных данных, на случай, если вы захотите попробовать сами.
test.bat
set /p batchvariable=Enter a number:_
sqlcmd -v sqlvariable=%batchvariable% -i test.sql
pause
Test.sql
SELECT $(sqlvariable) AS [result];
Когда вы запускаете пакетный файл, это то, что вы получаете.
На практике вы, вероятно, будете использовать одни и те же имена для переменной пакета и переменной SQL. Они разные выше, чтобы проиллюстрировать, что к чему.
Если вам нужно сделать это, вам может потребоваться более одной переменной. Вы справляетесь с этим, повторяя -v sqlvariablename=%batchvariablename%
часть sqlcmd
, например,
-v v1=%v1% -v v2=%v2%
test.bat
set /p item=Item :
set /p cost=Cost :
sqlcmd -v item="%item%" -v cost=%cost% -i test.sql
Test.sql
SELECT '$(item)' AS [item], $(cost) AS [cost];
Обратите внимание, что во второй пример добавлены кавычки (для строковых данных), которые не появились в первом примере (только с числовыми данными).
Возможно, вы захотите запустить пример с Box of Chocolates
для поля элемента и проверить поведение.