Использование двойных кавычек в запросе SQLCMD

Я хотел бы выполнить следующую команду через 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, который позволил бы мне правильно построить строку?

Спасибо!


person Tom H    schedule 21.07.2010    source источник


Ответы (1)


Я бы обычно использовал -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"
person gbn    schedule 21.07.2010
comment
Ооо! TRY...CATCH может сработать. Первая команда здесь, вероятно, будет иметь ту же проблему - BuildForge передаст буквальное значение для ${db_name} вместо того, чтобы изменить его на значение переменной. - person Tom H; 21.07.2010