自動建表的儲存過程

2021-09-05 20:59:44 字數 2246 閱讀 4512

自動建表的儲存過程  

最近做專案,需要每月自動建乙個月份表,於是找資料如何自動建表,原來用儲存過程可以做到自動建表

下面是我寫的例子

create proc [dbo].[createmonthtable]

@tablename varchar(30) as

begin

declare @count int

declare @strsql nvarchar(2000)

declare @createsql varchar(max)

set @strsql=n'select @insidecount=count(*) from sysobjects where id = object_id('''+ @tablename +''') and type = ''u'''

exec sp_executesql @strsql ,n'@insidecount int output',@count output

if(@count = 0)

begin

set @createsql='create table '+ @tablename +

'(id int identity(1, 1) not null primary key,

username nvarchar(20) not null,

address nvarchar(100),

statusname varchar(50),

addtime datetime default getdate())'

exec(@createsql)

endend

語句裡,select @insidecount=count(*) from sysobjects where id = object_id('''+ @tablename +''') and type = ''u''這個是用於判斷資料庫是否已存在這個表,如果有的話就不再次建立了

執行儲存過程的話用exec createmonthtable 'onemonth'

大家是不是覺得寫得有點死,希望欄位也能夠在外面傳入,其實改良一下就行

create  proc  createmonthtable

@tablename varchar(30),

@fields varchar(max) as

begin

declare @count int

declare @strsql nvarchar(2000)

declare @createsql varchar(max)

set @strsql=n'select @insidecount=count(*) from sysobjects where id = object_id('''+ @tablename +''') and type = ''u'''

exec sp_executesql @strsql ,n'@insidecount int output',@count output

if(@count = 0)

begin

set @createsql='create table '+ @tablename + @fields

exec(@createsql)

endend

執行儲存過程時要注意的是字段前後要用()括起來,要不然會報錯

如:exec createmonthtable 'twomonth','(id int identity(1, 1) not null primary key,username nvarchar(20) not null,address nvarchar(100),statusname varchar(50),addtime datetime default getdate())'

如果覺得麻煩,可以再必改寫一下,把 set @createsql='create table '+ @tablename + @fields改寫成:

set @createsql='create table '+ @tablename + +'([email='+@fields+')']'+@fields+')'[/email]

那麼在執行儲存過程時就不需要在字段前後加()了

如下:exec createmonthtable 'twomonth','id int identity(1, 1) not null primary key,username nvarchar(20) not null,address nvarchar(100),statusname varchar(50),addtime datetime default getdate()'

MYSQL批量建表儲存過程

分表比較多的情況,如何批量建立,可通過儲存過程實現 建立乙個儲存過程 紅色表結構,藍色為表名及表數量 delimiter create procedure sp create tab begin set str id int 11 not null auto increment comment 自增...

Oracle 儲存過程動態建表

動態sql,顧名思義就是動態執行的sql,也就是說在沒執行之前是動態的拼接的。任務 傳入引數 新建的表名hd 當前的年和月,例如hd 201105 表結構是 欄位1 id 型別是number,可以自動增加 欄位2 name 型別是varcha2,長度20 欄位3 city 型別是varchar2,長...

mysql儲存過程批量建表

asif 用mysql的儲存過程建立100張表 mysql delimiter create procedure createtables begin declareiint declaretable namevarchar 20 declaretable prevarchar 20 declare...