Использование двойных кавычек в запросе SQLCMD - PullRequest
2 голосов
/ 21 июля 2010

Я бы хотел выполнить следующую команду через SQLCMD:

IF DB_ID('My_DB') IS NOT NULL DROP DATABASE My_DB

Хотя есть несколько предостережений ...

  1. Имя базы данных является динамическим
  2. Программа, которая запускает команду (BuildForge), не заменит переменную, если она появляется в одинарных кавычках

Итак, я не могу использовать:

-Q"IF DB_ID('${db_name}') IS NOT NULL DROP DATABASE ${db_name}

потому что он будет использовать литерал $ {db_name} в одинарных кавычках. Я также не могу использовать:

-Q"IF DB_ID("${db_name}") IS NOT NULL DROP DATABASE ${db_name}

потому что SQLCMD срабатывает в начале и в конце двойных кавычек.

Я знаю, что могу создать скрипт и передать параметр для имени базы данных, но есть ли способ сделать это в одной командной строке без скрипта? Есть ли способ избежать двойных кавычек и т. Д.? Существует ли синтаксис BuildForge, который позволил бы мне правильно построить строку?

Спасибо!

1 Ответ

2 голосов
/ 21 июля 2010

Я бы обычно использовал -q и скрипт для этого, но некоторые мысли ...

Вы можете сделать это?

-Q"IF DB_ID(RTRIM(LTRIM('    ${db_name}    '))) IS NOT NULL DROP DATABASE ${db_name}"

Или это?

-Q"BEGIN TRY DROP DATABASE ${db_name} END TRY BEGIN CATCH IF ERROR_NUMBER() <> 3701 RAISERROR('some error not related to db not there', 16, 1) END CATCH"
...