自動建表的儲存過程
最近做專案,需要每月自動建乙個月份表,於是找資料如何自動建表,原來用儲存過程可以做到自動建表
下面是我寫的例子
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...