2013-01-15 21 views
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 must be the only statement in the batch

我想知道它是否有可能實現這一點。如果是,那麼我在做什麼錯誤或錯誤在哪裏?

+0

有GO將分開分批,嘗試消除GO – brykneval

+0

爲什麼你想要在存儲過程中?如果您使用SP,則需要先在SP內創建包含所有DDL代碼的SP。如果您只是跳過存儲過程部分並直接創建表,那將會容易得多。 –

+0

嘿Mikael,M一個sql_server/sql新手,所以嘗試它的功能。我希望程序能夠使單個程序創建整個設計。 – Sparky

回答

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) 
); 
0

由於埃裏克森的Mikael上面創建DB模式應該是在一個腳本文件,也可以是你可以配置一些部署,將創建您的模式說。所以最好避免在程序中創建模式。

當您必須爲每個客戶(例如)設計架構時,您可以擁有這些內部過程。