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 是另一张表 ,把字段对应下就好了