반응형
SQL Management Studio의 시작 / 끝 블록에서 "스키마 만들기"를 사용할 수없는 이유는 무엇입니까?
이 데이터베이스에 대한 모든 사용자와 스키마를 생성하는 스크립트를 생성했으며 IF EXISTS 검사로 CREATE 문을 래핑 할 때 CREATE SCHEMA 호출이 BEGIN / END 블록에서 실행되는 것을 허용하지 않는다는 것을 알았습니다. 잘못된 구문이라고 불평합니다. 그러나 나는 그 자체로 명령을 실행할 수 있습니다. 코드 샘플은 다음과 같습니다. SQL Server 2008 및 Management Studio R2를 사용하고 있습니다. 왜이 잘못된 구문입니까?
--DROP SCHEMA [acme]
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme'))
BEGIN
CREATE SCHEMA [acme] AUTHORIZATION [dbo]
END
스키마 생성은 배치에서 유일한 문이어야합니다. 이를 우회하는 한 가지 방법은 다음과 같습니다.
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme'))
BEGIN
EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
END
다음은 더 간단한 솔루션입니다 (간단한 검사).
IF (SCHEMA_ID('acme') IS NULL)
BEGIN
EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
END
자체 배치에 있어야합니다. 포장 할 수 있습니다EXEC('')
EXEC('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
요구 사항의 이유 CREATE SCHEMA
는 버전 6.5에 도입 된 이전 버전의 구문 과 관련이 있다고 생각합니다 ( 적어도 여기에 설명되어 있음 ).
CREATE SCHEMA
자체 배치에 있어야하므로 안에 포함하면 EXEC
괜찮습니다.
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme'))
BEGIN
EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
END
반응형
'Program Tip' 카테고리의 다른 글
노드가 n 개인 유 방향 그래프에서 최대 간선 수는 얼마입니까? (0) | 2020.12.03 |
---|---|
droppable 이벤트 종료시 jQuery 드래그 가능 객체를 원래 컨테이너로 되돌립니다. (0) | 2020.12.03 |
ActiveRecord 범위에서 주문 제거 (0) | 2020.12.03 |
이미지를로드 할 때 WPF에서 "리소스를 찾을 수 없음"예외 발생 (0) | 2020.12.03 |
하위 프로세스 호출에서 종료 코드 및 stderr 가져 오기 (0) | 2020.12.03 |