你只取了inserted中的一条记录来处理,不适合多条记录的情况,应该用游标逐条取出来处理deleted表也应该用游标逐条取出来删除表建表、删除表都应该用动态SQL语句:
exec('create table ...')
exec('drop table ...')

解决方案 »

  1.   

    顶一下 
    pbsql(风云) 
    我一般用他
      

  2.   

    create Trigger tr_department ON SI_DIC_STOREHOUSE
    FOR INSERT,DELETE
    AS
    if update(SH_SN_CH)
    BEGIN
    DECLARE @tbname sysname
    declare tb cursor local for
    select 'SI_SH_GDA_'+SH_SN_CH from inserted
    open tb
    fetch tb into @tbname while @@fetch_status=0
    begin
    exec('
      Create TABLE '+@tbname+' (
        GDA_SN_CH varchar(20) NOT NULL PRIMARY KEY,    --序号
        GD_SN_CH varchar(20) NOT NULL PRIMARY KEY,     --货物编号
        GDA_Stock_Amount_NO decimal(9) NOT NULL ,      --入库数量
        GDA_Stock_Price_CH  money NOT NULL,            --进价
        GDA_Reference_Price_CH money NOT NULL,         --参考进价
        GDA_Current_Stock_Amount_NO decimal NOT NULL,  --现库存量
        GDA_ESID_CH  varchar(20) NOT NULL,             --入库单号
        GDA_Re_CH  varchar(100)                    --备注
    )')
    fetch tb into @tbname
    end
    close tb
    deallocate tb
    END
    else
    BEGIN
    declare @s nvarchar(4000)
    declare tb cursor local for
    select 'drop table SI_SH_GDA_'+SH_SN_CH from deleted
    open tb
    fetch tb into @s
    while @@fetch_status=0
    begin
    exec(@s)
    fetch tb into @tbname
    end
    close tb
    deallocate tb
    END
      

  3.   

    楼上要把这句去掉:if update(SH_SN_CH)
      

  4.   

    不用去掉,楼主是想更新和删除的触发器做在一齐
    当 if update(SH_SN_CH) 不成立时,就是删除处理(这点我测试过,确实如此)
      

  5.   

    要是这样理解就有问题了:更新时应该既要create表,也要drop表
      

  6.   

    其实那句不应该要的,if else也不应该要的,if else里面的语句保留下来即可