2

小売店向けのモデル データベース デザインの作成に取り組んでいます。データベース スキーマを初期化する単一のプロシージャを作成しようとしています。

私が達成しようとしているのは、プロシージャ内から新しいスキーマを作成することです。私のコードは次のとおりです。

begin trans

create procedure Retail_Fill
as
    create schema Retail_Test;  
    go
    create table Retail_Test.customer(
        cust_id int,
        cust_name varchar(30),
        cust_phone int,
        cust_add varchar(50),
        constraint pk_customer primary key (cust_id)
    );

ここで、create schemaステートメントはそれ自体で正常に機能します。しかし、プロシージャ内でエラーが発生します。

無効な構文です!CREATE SCHEMA はバッチ内の唯一のステートメントである必要があります

これを達成することが可能かどうか知りたいです。はいの場合、何が間違っているのですか、またはエラーはどこにありますか?

4

2 に答える 2

4

CREATE SCHEMAは別のバッチとして実行する必要があります。SQL Server Management Studio のバッチは で区切られていGOます。これは、ストアド プロシージャには当てはまりません。または など、独自のバッチにする必要があるステートメントにEXECUTEを使用することで、必要なことを行うことができます。CREATE SCHEMACREATE PROCEDURE

create procedure Retail_Fill
as
exec('create schema Retail_Test');

create table Retail_Test.customer(
    cust_id int,
    cust_name varchar(30),
    cust_phone int,
    cust_add varchar(50),
    constraint pk_customer primary key (cust_id)
);
于 2013-01-15T06:32:36.440 に答える
0

上記の Mikael Eriksson が言ったように、DB スキーマの作成は単一のスクリプト ファイルにする必要があります。または、スキーマを作成する展開を構成することもできます。したがって、プロシージャ内でスキーマを作成することは避けたほうがよいでしょう。

顧客ごとにその場でスキーマを設計する必要がある場合は、これらの内部手順を使用できます (たとえば)。

于 2013-02-07T10:22:22.273 に答える