zoukankan      html  css  js  c++  java
  • 用触发器实现动态新增列

    create table ta(number int)

    create trigger test_tr on ta
    for insert
    as
    begin
    DECLARE @number int,@sql varchar(4000),@sql1 varchar(4000),@i int
    DECLARE roy CURSOR
    FOR SELECT * from inserted
    OPEN roy
    FETCH next FROM roy into @number
    WHILE @@FETCH_STATUS = 0
    begin
    begin
      if exists(select 1 from sysobjects where name='tb' and xtype='U')
        begin
             select @i=max(colid)+1 from syscolumns where id=object_id('tb')
             set @sql=N'alter table tb add C'+cast(@i as varchar)+' int null'
             set @sql1=N'update tb set C'+cast(@i as varchar)+'='+cast(@number as varchar)
    --print @sql
    --print @sql1
             exec(@sql)
             exec(@sql1)
        end
    else
        begin
             set @sql=N'create table tb(C1 int)'
             set @sql1=N' insert tb select C1='+cast(@number as varchar)
             exec(@sql)
             exec(@sql1)
        end
    end
    FETCH NEXT FROM roy INTO @number
    end
    CLOSE roy
    DEALLOCATE roy
    end
    测试:
    insert ta
    select 10 union all
    select 13 union all
    select 18 union all
    select 26
    查询:
    select * from tb

    C1          C2          C3          C4         
    ----------- ----------- ----------- -----------
    10          13          18          26

    (所影响的行数为 1 行)

    --drop table ta,tb
     

  • 相关阅读:
    从针对接口编程到依赖注入
    DataRow 数组转化成DataTable
    Math 类的方法概要
    .net控件
    字符串反转
    DataTable
    Enabled设置为False时,前景色和背景色也不改变的TextBox 并居中
    C# 四舍五入 (解决四舍六入五成双的问题)
    查询最后一条数据
    C# toString()
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463117.html
Copyright © 2011-2022 走看看