自动建表 2

来源:互联网 发布:淘宝人像摄影布光 编辑:程序博客网 时间:2024/05/03 01:31

/*
declare @Name varchar(20)
set @Name = ''
exec dbo.p_CreateYXRZTable @s_tablename='WWdcctrl12',@int=30,@dec=5,@strSm=0,@strMi=0,@strBig=0,@text=0,@message = @Name out
select @Name

*/

CREATE proc dbo.p_CreateYXRZTable
@s_tablename varchar(100),
@int int = null,
@dec int = null,
@strSm int = null,
@strMi int = null,
@strBig int = null,
@text int = null,
@Message int=null Output
as
/*---------------------------------------------------------------------------------------------------------------
----------过程传入的是一种数据类型的个数,@s_用来存储新增列的信息
---------------------------------------------------------------------------------------------------------------*/
declare @s_int varchar(8000),@s_Decimal varchar(8000),@s_StrSm varchar(8000),@s_StrMi varchar(8000),@s_StrBig varchar(8000),@s_Text varchar(8000),@s_defultB varchar(1000),@s_defultE varchar(1000)
declare @i int,@iFlag int
select @s_Decimal = '',@s_int = '',@s_StrSm = '',@s_StrMi = '',@s_StrBig = '',@s_Text = '',@s_defultB = '',@s_defultE = ''
select @int = isnull(@int,0),@dec = isnull(@dec,0),@strSm = isnull(@strSm,0),@strMi = isnull(@strMi,0),@Text = isnull(@Text,0),@strBig = isnull(@strBig,0)

--生成数据表名称
set @s_tablename='tbYXRZ' + @s_tablename
--判断目标数据库是否已经存在要生成的数据表,在没有重名的情况下进行新加表处理
if not exists(select 1 from sysobjects where id=object_id(@s_tablename) and type='u')
begin 
--表头表尾字段处理
set @s_defultB = 'CREATE TABLE ['+ @s_tablename +'] (
 [yxID] [int] IDENTITY (1, 1) NOT NULL ,
 [reportDate] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jz] [int] NULL ,
 [bz] [int] NULL ,
 [bc] [int] NULL ,
 [tq] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
 [zbry] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjman1] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjtime1] [datetime] NULL ,
 [jjman2] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [jjtime2] [datetime] NULL ,
 [CreateTime] [datetime] NULL ,
 [modifyman] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [modifyTime] [datetime] NULL , 
        [Data] [image] NULL ,
 [yxjs] [text] COLLATE Chinese_PRC_CI_AS NULL ,
 [jdsx] [text] COLLATE Chinese_PRC_CI_AS NULL ,'

set @s_defultE = 'CONSTRAINT [PK_'+@s_tablename+'] PRIMARY KEY  CLUSTERED
 (
  [yxID] DESC
 )  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]'
--------------------
--数据表字段语句生成
--------------------
set @i=1
while @int >= @i begin
  set @s_int = @s_int + '[Int' + right(1000 + @i,3) + '] [int] NULL ,'
  set @i = @i + 1
end

set @i=1
while @dec >= @i begin
  set @s_Decimal = @s_Decimal + '[Dec' + right(1000 + @i,3) + '] [decimal](18, 4) NULL ,'
  set @i = @i + 1
end

set @i=1
while @strSm >= @i begin
  --set @s_StrSm = @s_StrSm + '[StrSm' + right(1000 + @i,3) + '] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrSm = @s_StrSm + '[StrSm' + right(1000 + @i,3) + '] [varchar] (10) ,'
  set @i = @i + 1
end

set @i=1
while @strMi >= @i begin
  --set @s_StrMi = @s_StrMi + '[StrMi' + right(1000 + @i,3) + '] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrMi = @s_StrMi + '[StrMi' + right(1000 + @i,3) + '] [varchar] (50) ,'
  set @i = @i + 1
end

set @i=1
while @strBig >= @i begin
  --set @s_StrBig = @s_StrBig + '[StrBig' + right(1000 + @i,3) + '] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,'
  set @s_StrBig = @s_StrBig + '[StrBig' + right(1000 + @i,3) + '] [varchar] (500) ,'
  set @i = @i + 1
end


set @i=1
while @text >= @i begin
  set @s_Text = @s_Text + '[Text' + right(1000 + @i,3) + '] [text] COLLATE Chinese_PRC_CI_AS NULL ,'
  set @i = @i + 1
end
--------------------
--数据表创建
--------------------
exec(@s_defultB + @s_int + @s_Decimal + @s_StrSm + @s_StrMi + @s_StrBig + @s_Text + @s_defultE)
end
else
--@message=1表示数据库中已经存在同名数据表
  set @message=1

 

GO