문제

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

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

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

  1. 데이터베이스 이름은 동적
  2. 입니다.
  3. 명령을 실행하는 프로그램 (buildForge)은 단일 따옴표 내에서 나타나면 변수를 대체하지 않습니다
  4. 그래서, 나는 사용할 수 없다 :

    -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가 큰 따옴표의 시작과 끝에서 일어나기 때문에

    스크립트를 만들고 데이터베이스 이름에 대한 매개 변수를 전달할 수 있지만 스크립트없이 단일 명령 줄 에서이 작업을 수행 할 수있는 방법이 있습니까?이중 따옴표 등을 피할 수있는 방법은 무엇입니까?String을 올바르게 빌드 할 수있는 BuildForge 구문이 있습니까?

    감사합니다!

도움이 되었습니까?

해결책

일반적으로 -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"
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top