Sql Server 动态字段
在程序设计中,很多时候都涉及到数据字段的不固定,需要动态的增删一些字段
在这里我介绍一种我自己知道的方法
步骤:
1. 首先我们建立一张表,专门用来存储动态字段的详细信息
1 CREATE TABLE [dbo].[tb_Auto]( 2 [id] [int] IDENTITY(1,1) NOT NULL, --标识 3 [tabld_name] [varchar](50) NOT NULL, --动态字段所属的表格名称 4 [coloun] [varchar](50) NOT NULL, --字段名称 5 [datatype] [varchar](50) NOT NULL, --字段类型 6 [length] [int] NULL, --字段长度 7 [isnull] [varchar](10) NOT NULL, --是否为空 8 CONSTRAINT [PK_tb_Auto] PRIMARY KEY CLUSTERED 9 ( 10 [id] ASC 11 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 12 ) ON [PRIMARY]
2. 当我们需要动态为某个表添加一个字段是 ,只需要在上面的 tb_Auto表中添加一行数据,然后我采用触发器,为要添加字段的表动态添加一个字段
1 ALTER TRIGGER [dbo].[Trigger_Auto] 2 ON [dbo].[tb_Auto] for insert 3 AS 4 DECLARE 5 @tb_Name varchar(50), 6 @coloun varchar(50), 7 @datatype varchar(50), 8 @length varchar(100), 9 @isnull varchar(10), 10 @sql varchar(200) 11 BEGIN 12 13 SET NOCOUNT ON; 14 15 select @tb_Name=tabld_name,@coloun=coloun,@datatype=datatype,@length=[length],@isnull=[isnull] from inserted 16 if not exists (select * from syscolumns where id=object_id(@tb_Name) and name=@coloun) 17 begin 18 print @length 19 if @datatype='varchar' or @datatype='char' or @datatype='nvarchar' or @datatype='nchar' or @datatype= 'binary' 20 or @datatype='varbinary' or @datatype='decimal' or @datatype='numeric' 21 set @sql='ALTER table '+@tb_Name+' add '+@coloun+' '+@datatype+'('+@length+') '+@isnull 22 else 23 set @sql='ALTER table '+@tb_Name+' add '+@coloun+' '+@datatype+' '+@isnull 24 print @sql 25 exec (@sql) 26 end 27 28 END
3. 同理,如果需要动态删除,也可以建立一个删除的触发器 ,当删除 tb_Auto中的某一行时,删除这一行所对应的表中的对应字段
以上方法仅代表我的个人意见,当然大大们肯定会有更加好的方法,在这里,请大家多多指点!!!

浙公网安备 33010602011771号