В пакетном файле Windows, это работает:Вызов sqlcmd.exe в пакетном файле с использованием переменных приводит к ошибке: "неожиданный аргумент"
sqlcmd.exe -b -S xxMySqlServerNamexx -Q "BACKUP DATABASE xxMyDatabaseNamexx TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression"
Как это делает:
set vSource_SqlServer="xxMySqlServerNamexx"
sqlcmd.exe -b -S %vSource_SqlServer% -Q "BACKUP DATABASE xxMyDatabaseNamexx TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression"
Но это:
set vSource_SqlServer="xxMySqlServerNamexx"
set vSource_SqlDbName="xxMyDatabaseNamexx"
sqlcmd.exe -b -S %vSource_SqlServer% -Q "BACKUP DATABASE %vSource_SqlDbName% TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression"
... вызывает ошибки:
Sqlcmd: 'xxMyDatabaseNamexx" TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression"': Unexpected argument. Enter '-?' for help.
Как вы можете видеть, что задыхается от использования переменной %vSource_SqlDbName%
вместо xxMyDatabaseNamexx
Есть правильный способ сделать это в таком виде (я имею в виду, да, я, вероятно, следует использовать Powershell или альтернативный подход, но у меня есть несколько существующих пакетных файлов в этой форме, которые я бы предпочел преобразовать, чтобы использовать переменные в этой форме, даже если это не идеальный способ сделать это)?