2010-08-09 3 views
12

우리는 Visual Studio Database Professional을 사용하고 있으며 배포하는 동안 환경을 구별하기 위해 SQLCMD 변수를 많이 사용합니다.자동으로 SQLCMD 모드를 스크립트에 적용 할 수 있습니까?

컨텍스트 설정에 사용할 수있는 지시어가 몇 가지 있습니다 (예 : connect for server name). 스크립트 자체 내에 SQLCMD 모드를 강제 실행하는 방법이 있습니까? 배포 프로세스의 일부는 DBA가 스크립트를 검사하고 실행하도록하는 것입니다. 그러면 안전한 안전망이 될 것입니다 (SQLCMD로 실행 모드를 설정하도록 상기시켜야 할 필요는 없습니다).

+0

+1 비슷한 해결책을 찾고 있습니다. 그것을하는 방법을 이제까지 알아 냈는가? –

+0

아니요, 아직 기다리고 있습니다. 나는 현상금을 시작하는 것을 주저한다. –

답변

4

해결책은 아니지만 해결 방법으로 스크립트를 경고에 포함시킬 수 있습니다. This post이 나를이 영감으로 삼았습니다.

SET NOEXEC OFF; -- previous execution may have toggled it 
:setvar IsSqlCmdEnabled "True" 
GO 
IF ('$(IsSqlCmdEnabled)' = '$' + '(IsSqlCmdEnabled)') 
BEGIN 
    PRINT('Use SqlCmd-mode!!'); 
    SET NOEXEC ON; 
    -- RAISERROR ('This script must be run in SQLCMD mode.', 20, 1) WITH LOG 
END 
ELSE 
BEGIN 
    PRINT('Using SqlCmd-mode') 
    -- insert the code you really want to execute: 
    -- ... 
END 
SET NOEXEC OFF; -- do not disable next execution in this session 
+0

나는 이것이 늦었지만 미래에 이것을 발견하는 다른 사람들을 위해 알고있다 : VS2010 퍼블리시 스크립트는 기본적으로 이것을한다 (특별한'__IsSqlCmdEnabled' var를 설정하고 즉시 값을 체크한다). 그러나 그들은 또한 SET NOEXEC ON을 추가로한다. 스크립트의 다른 항목이 실행되지 않도록 안전 조치. –

+0

@Micheal, 팁 주셔서 감사 드리며, NOEXEC을 추가했습니다. (아직 테스트되지 않았으므로이 순간에는 SqlServer가 없지만 충분히 간단합니다.) –

+0

첫 실행시에만 작동합니다. – Paul

0

이것은 가능하지 않습니다. 나는 심지어 SSMS 프로젝트 모드를 점검했다.

그러나 BIDS에서 데이터베이스 프로젝트를 만드는 경우 배포 전 & 배포 후 스크립트는 기본적으로 SQLCMD 모드로 실행됩니다.

나는 그것이 당신이 원하는 대답이 아니라는 것을 알고있다. 그러나 스크립트 파일의 일부 텍스트를 기반으로 사용자 지정 SSMS 플러그인을 작성하는 것이 가장 좋다.

관련 문제