반응형
SQL Management Studio의 시작/끝 블록에서 "스키마 생성"을 사용할 수 없는 이유는 무엇입니까?
이 데이터베이스의 모든 사용자와 스키마를 작성하는 스크립트를 생성했는데, CREATE 문을 IF EXISTES 체크로 랩하면 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]')
이 요구의 이유는 이전 버전의 V2와 관련이 있다고 생각합니다.CREATE SCHEMA
버전 6.5에서 도입된 구문(적어도 여기에 기재되어 있습니다).
(항상) Dynamic SQL 사용이 허용되지 않을 수 있으므로EXEC
최선의 접근법이 아닙니다.사용.GO
스테이트먼트를 사용하면 작업이 향상됩니다.
USE [MyDB]
GO
IF (SCHEMA_ID('MySchema') IS NOT NULL)
BEGIN
DROP SCHEMA [MySchema];
END
GO
CREATE SCHEMA [MySchema] AUTHORIZATION [dbo]
GO
CREATE SCHEMA
자체 배치에 있어야 합니다.따라서, 그 안에 포함시켜 주세요.EXEC
넌 괜찮을 거야
IF (NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'acme'))
BEGIN
EXEC ('CREATE SCHEMA [acme] AUTHORIZATION [dbo]')
END
언급URL : https://stackoverflow.com/questions/5748056/why-cant-i-use-create-schema-in-a-begin-end-block-in-sql-management-studio
반응형
'programing' 카테고리의 다른 글
Swift로 현재 언어 코드를 얻는 방법은 무엇입니까? (0) | 2023.04.17 |
---|---|
Bash에 TRY CATCH 명령어가 있습니까? (0) | 2023.04.17 |
Oracle에 의한 페이징 (0) | 2023.04.02 |
서로 다른 JS 라이브러리에서 생성된 모든 AJAX 요청을 가로채는 방법 (0) | 2023.04.02 |
React와 동등한 TypeScript는 무엇입니까?PropTypes.node? (0) | 2023.04.02 |