2010-07-21 59 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}传递一个字面值,而不是将其更改为变量值。 – 2010-07-21 18:16:56

+0

第二种方法奏效,谢谢! – 2010-07-21 20:39:43