在过程内定义模式

时间:2013-01-15 05:58:39

标签: sql sql-server sql-server-2008-r2

我正在为零售店创建模型数据库设计。我正在尝试创建一个初始化数据库模式的过程。

我想要实现的是从过程内部创建一个新模式。我的代码如下:

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语法!CREATE SCHEMA必须是批处理中唯一的语句

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

2 个答案:

答案 0 :(得分: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)
);

答案 1 :(得分:0)

正如Mikael Eriksson所说,创建数据库架构应该在一个脚本文件中,或者您可以配置一些将创建架构的部署。因此,最好避免在过程中创建模式。

当您必须为每个客户(例如)设计架构时,您可以拥有这些内部程序。