Использование одной переменной в операторе SET другой переменной

Я пишу пакетный скрипт, который использует SQLCMD для вывода таблиц с сервера базы данных на локальный компьютер. Для этого я создаю запрос таким образом, чтобы у меня была возможность указать только имя таблицы. Запрос строится в зависимости от имени таблицы, которое затем используется в команде SQLCMD. Фрагмент кода для создания запроса показан ниже:

@echo off
SET tableName = testDB
SET dumpTable="SET NOCOUNT ON; SELECT * FROM %tableName%"
ECHO %dumpTable%

При запуске этого скрипта я получаю следующий вывод

"SET NOCOUNT ON; SELECT * FROM "

Переменная tableName не заменяется в операторе set. Как мне изменить свой скрипт для достижения этого результата:

"SET NOCOUNT ON; SELECT * FROM testDB"

person sriramn    schedule 21.07.2013    source источник


Ответы (1)


У вас не должно быть пробелов вокруг знака = в назначениях переменных. Замените это:

SET tableName = testDB

с этим:

SET tableName=testDB

Кроме того, у вас не должно быть двойных кавычек вокруг значения при присвоении переменной, потому что таким образом двойные кавычки станут частью значения. Лучше заключать все назначение в двойные кавычки, а затем при необходимости заключать в кавычки переменную, когда она используется, например:

set "tableName=testDB"
set "dumpTable=SET NOCOUNT ON; SELECT * FROM %tableName%"
sqlcmd -d database -q "%dumpTable%"
person Ansgar Wiechers    schedule 21.07.2013