在SQLCMD查询中使用双引号

时间:2010-07-21 17:39:11

标签: sql-server sql-server-2008 sqlcmd buildforge

我想通过SQLCMD发出以下命令:

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

虽然有一些警告......

  1. 数据库名称是动态的
  2. 运行命令(BuildForge)的程序如果出现在单引号内,则不会替换该变量
  3. 所以,我不能使用:

    -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 个答案:

答案 0 :(得分: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"