现有一个数据表talbe1
ID 项目      类型    长度
1  计量单位  字符     20
2  数量      数字     4
.  ....      ....     .
.  ....      ....     .
起始时table2为
ID  书名
然后
table2将根据table1的内容动态的添加列 
ID   书名  计量单位(varchar(20))  数量(int(4))..........
我写了一段程序(有错),是动态的往table2中插入列,先要判断要插入table2中的列是否存在,
declare @sql varchar(2000)
set @sql='alter table table2 add '
select  @sql=@sql+项目名称+if exists(Select   *   from   dbo.syscolumns   Where   Name=项目名称   And   ID=OBject_ID('教材管理卡片编辑')) ''
else case 
when 项目类型 = '文本型' then ' varchar(' + rtrim(项目长度) + '),'
when 项目类型 = '数字型' then ' int'
end from table1
set @sql=left(@sql,len(@sql))print @sql
exec(@sql)
这样做我将会遇到几个问题
1、如何在SQL语句中实现:判别table2中的列是否已经存在
2、如何对table2进行操作,因为列不确定。在insert语句中要写列的字段名,而我不知道table2中有哪些字段名

解决方案 »

  1.   

    if exists(select * from syscolumns where id=object_id(表名) and name=字段名)   
    begin   
      print   '存在'   
    end   
    else   
      alter   table   .....   
    end
      

  2.   

    表结构如果都不能确定,对以后的程序开发是比较麻烦的。如果能确定下来的话,尽量确定。检测表列是否存在的语句,楼上已经说过了。试试看吧。
    在对Table2进行表列操作的时候,建议你再建立一个表,保存这个表里面有哪些列,其中存储了字段名、含义、类型、长度等信息。或者通过SQL数据库本身的一些功能,获得表结构。MSSQL中可以通过sp_columns存储过程获取表结构的定义。