2

我想通过 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 语法?

谢谢!

4

1 回答 1

2

我通常会使用 -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"
于 2010-07-21T17:55:50.947 回答