получить файл .BAT или SQLCMD, чтобы запросить ввод у пользователя - PullRequest
2 голосов
/ 11 июля 2011

Я пытаюсь выполнить следующий запрос

sqlcmd -STEMP7 -E -devolive_base -w256
    -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl $,$,$ SELECT @r")

Я пытаюсь получить BAT-файл, чтобы запросить у пользователя 3 переменные ... Кто-нибудь может мне помочь?

Ответы [ 3 ]

3 голосов
/ 11 июля 2011

Вы можете использовать set /p для получения переменных:

set /p var1=Enter variable 1
set /p var2=Enter variable 2
set /p var3=Enter variable 3

... затем использовать их в командной строке:

sqlcmd -STEMP7 -E -devolive_base -w256 -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl %var1%,%var2%,%var3% SELECT @r")

Имейте в виду, что это все еще оставляет вас открытымк атакам SQL-инъекций или кому-то, вводящему что-то разрушительное.

0 голосов
/ 11 июля 2018

Вот простой пример, в котором решена основная проблема и удалена специфика вашего фактического запроса.

Я удалил команду, чтобы изменить приглашение 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];

Когда вы запускаете пакетный файл, это то, что вы получаете.

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 для поля элемента и проверить поведение.

Another example

0 голосов
/ 12 июля 2011

Спасибо за комментарии, люди.

Проблема в том, что мой синтаксис для SQLCMD неверен, но он не выдает ошибку, подстановка переменной работает, если я заменю ее на osql. Так что это прекрасно работает

set /p var1= Enter Userid
set /p var2= Enter Casino Name  
set /p var3= Enter Screename 

osql -STEMP7 -E -devolive_base -w256 -QEXIT("DECLARE @r int EXEC @r = usp_AddToObservationtbl %var1%,%var2%,%var3% SELECT @r") -b -oc:\bat\observation.log
exit errorlevel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...