2010-07-21 2 views
2

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

Спасибо!

ответ

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" 
+0

Oooh! TRY ... CATCH может работать. Первая команда здесь, вероятно, будет иметь ту же проблему - BuildForge будет передавать буквальное значение для $ {db_name} вместо изменения его значения переменной. –

+0

Второй способ работал, спасибо! –