2011-08-05 4 views
2

SQL Server Management Studio에서 필자는 의도 한 특정 데이터베이스 대신 master 데이터베이스에 대해 SQL 스크립트를 반복적으로 실행하도록 관리합니다. SQL 파일을 연 다음 실행을 클릭하면 데이터베이스를 먼저 설정하는 것을 잊어 버립니다.SQL을 실행하기 전에 데이터베이스 이름 확인

서버 연결에 대한 기본값을 설정할 수 있다는 것을 알고 있지만 의도 한 것이 기본값이 아닌 경우 의도 한 데이터베이스가 아닌 기본 데이터베이스에서 sql을 실행할 수 있습니다.

sql의 USE 문도 작동하지 않습니다. 스크립트를 여러 다른 테스트 데이터베이스에 대해 실행해야합니다.

어쨌든 스크립트가 master 데이터베이스에 대해 실행될 것이라는 경고를 표시 할 수 있습니까? 아니면 스크립트가 실행되기 전에 데이터베이스를 먼저 선택해야합니까?

답변

10

한 가지 방법은 필수 데이터베이스에서만 사용 권한이있는 계정으로 연결하는 것입니다. 지금하고있는 일은 sysadmin이 아닙니다.

당신이 연결

편집 죽일 것이다, 시스템 관리자로 실행 각 스크립트

IF DB_NAME() = 'master' 
    RAISERROR ('Oi! Stop!', 20, 1) WITH LOG 
GO 

이 줄을 추가하려는 경우 개발자

정상 다음과 같습니다

에게 나는 시스템 관리자 권한이 필요 없기 때문에 Quassnoi의 솔루션을 좋아합니다. 그러나 의견을 보내거나 되돌릴 수는 없습니다.

그래서 나는 이것을 가지고 놀았습니다. 그것은 대부분의 상자

을 확인
  • 에는 시스템 관리자가 필요하지
  • 재미있는 메시지
  • 다시 실행 가능한 (가지)

가 (드롭 다운을 통해)를 SSMS 사용이 무시됩니다 하나의 문제가있다 (Quassnoi의 노트에 따르면). 더 이상 아이디어가 없습니까?

SET NOEXEC OFF; 
GO 
DECLARE @isOK bit; 
BEGIN TRY 
    IF DB_NAME() IN ('master', 'protectedDB1', '...') 
     RAISERROR ('To Catch Block Only', 16, 1); 
    SET @isOK = 1; 
END TRY 
BEGIN CATCH 
    SET @isOK = 0; 
    RAISERROR ('Oi! Stop!', 16, 1); 
END CATCH 
IF @isOK = 0 
    SET NOEXEC ON; 
GO 
SELECT 1; 
GO 
+1

+1 : 폭력적이지만 재미있는 해결책! – Tao

+0

+1, 내가 본 최고의 오류 메시지 !!! ''오이! 그만! '' –

+0

+1하지만 이것은 부정 행위입니다. 'SET NOEXEC ON'에 재미있는 메시지를 제공 할 수 없습니다! – Quassnoi

7
IF DB_NAME() = 'master' 
     SET NOEXEC ON 
GO 
SELECT 1 
GO 

SET NOEXEC 컴파일하지만 실행되지 스크립트에서 명령문의 나머지를 할 것입니다.

이 연결에서 아무 것도 실행하기 전에 SET NOEXEC OFF을 발급해야합니다 (드롭 다운 상자에서 데이터베이스 선택).

스크립트 파일을 닫았다가 다시 열면 연결을 닫았다가 다시 엽니 다.

+1

"SET NOEXEC OFF '를 실행해야합니까? ...? –

관련 문제