2010-07-21 12 views
2

나는 SQLCMD를 통해 다음 명령을 실행하고 싶습니다 :

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

비록 몇 가지주의 사항이 있습니다 ...

  1. 데이터베이스 이름이 동적 변수를 대체하지 않습니다 명령 (BuildForge)를 실행
  2. 이 프로그램은 작은 따옴표 안에 나타나는 경우

그래서, 내가 사용할 수 없습니다

-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

우! TRY ... CATCH가 작동 할 수 있습니다. 첫 번째 명령은 아마 같은 문제가 발생할 것입니다. BuildForge는 변수 값으로 변경하는 대신 $ {db_name}의 리터럴 값을 전달합니다. –

+0

두 번째 방법이 작동했습니다. 감사합니다! –