各位大蝦,有表a,表b,表c
a表結構如下:
area varchar(100)
town varchar(100)b表結構如下
area varchar(100)
town varchar(100)
area_id varchar(4)
areaid int (自增變量)
c表結構如下
area_id varchar(4)
黨a表插入值后,觸發器獲得信息,搜尋b表,判斷是否有和這個area\town相同的記錄,有就不插入,直接取得這個area_id,沒有的話,就取這個a標的area\town插入b 表,觸發器生成area_id,最後將這個area_id插入c表。
現在踫到個問題,例如中國上海,在b表有area_id為1的紀錄,則c表就會插入null值,如果中國上海的在b表裏沒有,則c表能正確插入值.請教下這是爲什麽?代碼:
  ALTER trigger a_test
on a
after insert
as 
declare
@area varchar(100),@town varchar(100),@area_id varchar(4)--地区维表
select @area=area,@town=town from inserted
if @area!=''and @town!=''
begin
if exists(select * from b where town=@town and area=@area)
  begin
select area_id from b where town=@town and area=@area
  end
else
  begin
insert into b(town,area) values(@town,@area)
update b set area_id=cast(areaid as varchar)  where town=@town and area=@area
select @area_id=area_id from b where town=@town and area=@area
  end
endinsert into c(Area_ID) values(@area_id)
謝謝!

解决方案 »

  1.   

    把表结构贴上来看看
    ALTER   trigger   a_test 
    on   a 
    after   insert 
    as   
    declare @area   varchar(100),@town   varchar(100),@area_id   varchar(4)--地区维表 
    select   @area=area,@town=town   from   inserted 
    if   @area!=''and   @town!='' 
    begin 
    if   exists(select  1  from   b where   town=@town   and   area=@area) 
        begin 
    select  @area_id = area_id   from   b   where   town=@town   and   area=@area 
        end 
    else 
        begin 
    insert   into   b(town,area)   values(@town,@area) 
    update   b   set   area_id=cast(areaid   as   varchar) where   town=@town   and   area=@area 
    select   @area_id=area_id   from   b   where   town=@town   and   area=@area 
        end 
    end insert   into   c(Area_ID)   values(@area_id) 
      

  2.   

    a表結構如下: 
    area   varchar(100) 
    town   varchar(100) b表結構如下 
    area   varchar(100) 
    town   varchar(100) 
    area_id   varchar(4) 
    areaid   int   (自增變量) 
    c表結構如下 
    area_id   varchar(4)