SQLCMD Синтаксическая ошибка при запуске скрипта, который отлично работает в Management Studio - PullRequest
3 голосов
/ 17 марта 2010

Когда я запускаю этот select '$(''test'')' в SQL Management Studio 2008, он возвращает $('test')

Когда я запускаю sqlcmd -S SERVER -E -d DATABASE -q "select $(''test'')" в командной строке, он возвращает Sqlcmd: Error: Syntax error at line 1 near command '''.

Если я уберу знак доллара, это сработает. Является ли "$" специальным символом?

Это ошибка sqlcmd? Как мне изменить скрипт, чтобы получить желаемый результат.

Ответы [ 2 ]

14 голосов
/ 17 марта 2010

Да, $(id) имеет особую семантику в SQLCMD: это подстановка переменных. Вы можете запускать такие команды, как:

sqlcmd /E /S . /v variable=MyTable /Q "select * from $(variable)"

, и это будет выбрано из MyTable. Как вы догадываетесь, /v - это переключатель для определения переменной. SSMS, с другой стороны, по умолчанию не интерпретирует SQL для подстановки переменных. Для этого можно настроить SSMS , установив флажок «Открыть запрос вдовам в режиме SQLCMD».

Подробнее о режиме см. Использование sqlcmd с переменными сценариев .

0 голосов
/ 17 марта 2010

команда, которую вы пытаетесь запустить:

select $('test')

недействительно. Как вы заметили, когда вы удаляете «$», это работает:

select ('test')

Я не уверен, что вы действительно пытаетесь сделать, у вас есть три " символа двойной кавычки, вы можете попробовать использовать эту команду:

select '$(test)'

что будет:

sqlcmd -S SERVER -E -d DATABASE -q "select ''$(test)''"
...