【问题标题】:Using double-quotes in a SQLCMD query在 SQLCMD 查询中使用双引号
【发布时间】:2010-07-21 17:39:10
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: sql-server sql-server-2008 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"
    

    【讨论】:

    • 哦! TRY...CATCH 可能会起作用。这里的第一个命令可能会遇到同样的问题 - BuildForge 将为 ${db_name} 传入一个文字值,而不是将其更改为变量值。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2016-05-13
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多