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语句本身可以正常工作。但是在程序内部它给出了一个错误:

Invaid Syntax!CREATE SCHEMA 必须是批处理中的唯一语句

我想知道是否有可能实现这一目标。如果是,那么我做错了什么或错误在哪里?

4

2 回答 2

4

CREATE SCHEMA必须作为单独的批处理执行。SQL Server Management Studio 中的批次由GO. 在存储过程中情况并非如此。您可以通过将EXECUTE用于需要在自己的批次中的语句来执行您想要的操作,例如CREATE SCHEMAor CREATE 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 Schema 应该在单个脚本文件中,或者您可以配置一些将创建您的模式的部署。所以最好避免在过程中创建模式。

当您必须为每个客户动态设计模式时(例如),您可以拥有这些内部过程。

于 2013-02-07T10:22:22.273 回答