Я пытаюсь создать пакет для выполнения нескольких sql-скриптов и некоторых запросов. Я использую sqlcmd в моей партии следующим образом:
@echo off
sqlcmd -S server -U user -P password -Q query
Поскольку я буду выполнять разные запросы на одном сервере, я бы хотел заменить оператор сервера переменной. Поэтому я мог бы написать что-то вроде этого:
@echo off
SET server=192.X.X.X
sqlcmd -S server -U user -P password -Q first query
sqlcmd -S server -U user -P password -Q second query
Я нашел этот вопрос на SO, но я все еще не могу понять, как это работает:
SQLCMD с использованием пакетной переменной в запросе
У кого-нибудь есть идея?
Большое спасибо!
Немного расширив свой комментарий:
@Echo off
Set "server=192.X.X.X"
Set "user=myname"
Set "password=pa55w0rd"
sqlcmd -S %server% -U %user% -P %password% -Q first query
sqlcmd -S %server% -U %user% -P %password% -Q second query
Вы можете приложить свои переменные с соответствующим цитированием по мере необходимости.
От Microsoft: "Cmd.exe предоставляет переменные расширения пакетного параметра от% 0 до% 9. Когда вы используете параметры партии в пакетном файле,% 0 заменяется именем командного файла, а% 1 -% 9 заменяются соответствующим аргументы, которые вы вводите в командной строке ".
Поэтому, если количество запросов, которые вы хотите выполнить, известно, просто передайте их через такие параметры:
Test.bat:
@echo off
SET server=192.X.X.X
sqlcmd -S server -U user -P password -Q %1%
sqlcmd -S server -U user -P password -Q %2%
Затем вызовите Test.bat следующим образом:
Test.bat "Select * from Test1" "Select * From Test2"
Таким образом вы можете передать до 9 запросов.
Set "var=%server% myString"
(сSet "var=%server% myString"
или без них по мере необходимости) . Кроме того, если вы хотите включить амперсанд,&
тогда вам нужно будет экранировать его с помощью каретки^
например,Set "var=%server% ^& myString"
.