118

ビルド プロセスの一環として、コードを 4 つの異なる環境にデプロイする際にデータベース更新スクリプトを実行します。さらに、リリースを本番環境にドロップするまで同じクエリが追加されるため特定のデータベースで複数回実行できる必要があります。このような:

IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[Table]'))
BEGIN
  CREATE TABLE [Table]
  (...)
END

現在、展開/ビルド スクリプトに create schema ステートメントがあります。スキーマの存在はどこで照会できますか?

4

5 に答える 5

191

sys.schemasをお探しですか?

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'jim')
BEGIN
EXEC('CREATE SCHEMA jim')
END

CREATE SCHEMAは独自のバッチで実行する必要があることに注意してください(以下の回答に従って)

于 2008-10-22T14:44:32.420 に答える
165

@bdukes は、スキーマが存在するかどうかを判断するのに適していますが、上記のステートメントは SQL Server 2005 では機能しませんCREATE SCHEMA <name>。独自のバッチで実行する必要があります。回避CREATE SCHEMA策は、exec でステートメントを実行することです。

ビルドスクリプトで使用したものは次のとおりです。

IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = '<name>')
BEGIN
    -- The schema must be run in its own batch!
    EXEC( 'CREATE SCHEMA <name>' );
END
于 2009-02-06T17:32:02.917 に答える
2

コンポーネントのレイアウトが許せば、これも機能します。

存在する場合 (sys.schemas WHERE name = 'myschema' から 1 を選択) SET NOEXEC ON
行く
CREATE SCHEMA マイスキーマ
行く
SET NOEXEC OFF -- さらに処理が必要な場合。
行く
于 2020-01-09T20:41:11.423 に答える