답변:
말했듯이, 방법이 없습니다.
그러나 SQLCMD 모드가 켜져 있는지 확인하고 스크립트가 아닌 경우 스크립트를 종료하려면 스크립트 헤더에 빠른 검사를 포함시켜야합니다.
:setvar DatabaseName "MyDatabase"
GO
IF ('$(DatabaseName)' = '$' + '(DatabaseName)')
RAISERROR ('This script must be run in SQLCMD mode. Disconnecting.', 20, 1) WITH LOG
GO
-- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors
IF @@ERROR != 0
SET NOEXEC ON
GO
PRINT 'You will not see this unless SQLCMD mode is on'
-- Rest of script goes here
GO
SET NOEXEC OFF
GO
심각도 20을 사용하는 이유가 있는데, GO
나중에 스크립트에 배치 터미네이터 가 있더라도 더 이상 스크립트 코드가 실행되지 않도록 연결을 즉시 종료하는 경향이 있습니다 .
시스템 문제를 나타내며 치명적인 오류이므로 명령문 또는 배치를 실행하는 데이터베이스 엔진 태스크가 더 이상 실행되지 않습니다. 작업은 발생한 내용에 대한 정보를 기록한 다음 종료됩니다. 대부분의 경우 데이터베이스 엔진 인스턴스에 대한 응용 프로그램 연결도 종료 될 수 있습니다 . 이 문제가 발생하면 문제에 따라 응용 프로그램을 다시 연결하지 못할 수 있습니다.
이 범위의 오류 메시지는 동일한 데이터베이스의 데이터에 액세스하는 모든 프로세스에 영향을 줄 수 있으며 데이터베이스 또는 개체가 손상되었음을 나타냅니다. 심각도가 19-24 인 오류 메시지가 오류 로그에 기록됩니다.
아니.
그러나 항상 SQLCMD 모드 에서 실행하고 T-SQL을 가질 수 있습니다.
SQLCMD 명령과 Transact-SQL을 명확하게 구분하려면 모든 SQLCMD 명령 앞에 콜론 (:)을 붙여야합니다.