我正在为零售店创建模型数据库设计。我正在尝试创建一个初始化数据库模式的过程。
我想要实现的是从过程内部创建一个新模式。我的代码如下:
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必须是批处理中唯一的语句
我想知道是否有可能实现这一目标。如果是,那么我做错了什么或错误在哪里?
答案 0 :(得分:4)
CREATE SCHEMA必须作为单独的批处理执行。 SQL Server Management Studio中的批处理由GO
分隔。在存储过程中不是这种情况。您可以使用EXECUTE为需要在CREATE SCHEMA
或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)
);
答案 1 :(得分:0)
正如Mikael Eriksson所说,创建数据库架构应该在一个脚本文件中,或者您可以配置一些将创建架构的部署。因此,最好避免在过程中创建模式。
当您必须为每个客户(例如)设计架构时,您可以拥有这些内部程序。