1. ホーム
  2. sql

SQL Management Studio の begin/end ブロックで "create schema" を使用できないのはなぜですか?

2023-09-12 12:44:12

質問

このデータベースのすべてのユーザーとスキーマを作成するスクリプトを作成しましたが、CREATE ステートメントを IF EXISTS チェックでラップすると、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