日期:2014-05-17  浏览次数:20597 次

sql触发器 怎么才能只插入字段非空的记录
ALTER   trigger   [dbo].[tr_insert_r5mrcs]   on   [dbo].[R5MRCS]   
  for   insert   
  as   
 declare @class char(5)
 
 
  insert   R4BUMEN(mrc_code,mrc_desc,mrc_class,mrc_not_used) 
  select   mrc_code,mrc_desc,mrc_class,MRC_NOTUSED  from   inserted   
else
begin
   set @class ='0'
   insert   R4BUMEN(mrc_code,mrc_desc,mrc_class,mrc_not_used) 
  select   mrc_code,mrc_desc,@class,MRC_NOTUSED  from   inserted  
end

上面的:
 select @class=mrc_class from inserted 

 if (@class is null)好像有问题,我批量插入时,插入的数据总是插入一样的,
好像执行行,@class的值没有变动
要怎么改才能叫空字段不插入到数据库中非空字段照常插入呢?

------最佳解决方案--------------------
ALTER   trigger   [dbo].[tr_insert_r5mrcs]   on   [dbo].[R5MRCS]   
   for   insert   
   as 
begin
   insert   R4BUMEN(mrc_code,mrc_desc,mrc_class,mrc_not_used)  
   select   mrc_code,mrc_desc,isnull(mrc_class,0),MRC_NOTUSED  from   inserted
end  

   
------其他解决方案--------------------
其实不建议过多允许有null值的列,应该尽可能考虑是否应该赋予默认值,比如字符类型的,就赋予0.那么插入的时候用isnull(列名,0)这样来避免插入null值。
另外你的那个语句是判断行的,不是判断列的,而你希望的是判断列是否为空。
------其他解决方案--------------------
我当前这个表的数据是从别的数据库取出来的,我要把当前数据库里mrc_class字段不为空的记录都再插入到本地的另一张表中.
------其他解决方案--------------------
lixzhong 正解,谢谢.

------其他解决方案--------------------
insert into TB2(...)
select ... from TB1 where not mrc_class is null
--tb1 是现有表,tb2 是另一张表 ,把字段对应下就好了