现有一个数据表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.   

    declare @sql varchar(2000)
    set @sql='alter table table2 add '
    select  @sql=@sql+项目名称+case when exists(Select   *   from   dbo.syscolumns   Where   Name=项目名称   And   ID=OBject_ID('教材管理卡片编辑'))  then ''
    else case 
    when 项目类型 = '文本型' then ' varchar(' + rtrim(项目长度) + '),'
    when 项目类型 = '数字型' then ' int'
    end  end from table1
    set @sql=left(@sql,len(@sql))print @sql
    exec(@sql)
      

  2.   

    ls,我调试以后又错误,我把它改了一下
    declare @sql varchar(2000)
    set @sql=''
    select  @sql=@sql+ case when exists(Select   *   from   dbo.syscolumns   Where   Name=项目名称   And   ID=OBject_ID('教材管理卡片编辑'))  then '' else+ 'alter table 教材管理卡片编辑 add '+项目名称+case 
    when 项目类型 = '文本型' then ' varchar(' + rtrim(项目长度) + ') '
    when 项目类型 = '数字型' then ' int'
    when 项目类型 = '货币型' then ' money'
    end  end from 教材项目自定义
    set @sql=left(@sql,len(@sql))print @sql
    exec(@sql)
    谢谢你给我提示