为了账号安全,请及时绑定邮箱和手机立即绑定

如下,错误213 16 插入错误:列名或所提供值的数目与表定义不匹配?为什么?

如下,错误213 16 插入错误:列名或所提供值的数目与表定义不匹配?为什么?

DIEA 2022-05-06 11:07:24
判断 如果向表A添加了数据,只要添加了,就把部分字段中的值给别的表里,触发器怎么写?CREATE TRIGGER InsertTax ON 数据总表FOR INSERTASBEGINDECLARE@nsrsbh varchar(255),@nsrmc varchar(255),@ssqq varchar(255),....select @nsrsbh=纳税人识别号,@nsrmc=纳税人名称,@yh=开户银行,@yhzh=银行账号,@zgjgdm=主管税务机关代码,@zgjgmc=主管税务机关名称,@zsl=征收率,@jehj=金额合计 from InsertedInsert into 单位表 select @nsrsbh,@nsrmc,@yh,@yhzh,@zgjgdm,@zgjgmc,@zsl,@jehjEND帮忙看看错在哪?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

Table Name: TB_1,TB_2 (两个table 结构完全一样)

Create Table TB_1(ID Int, Name_1 varchar(20),Status varchar(20) ,Type Varchar(20))

Create Table TB_2(ID Int, Name_1 varchar(20),Status varchar(20) ,Type Varchar(20))

-- 为Tb_1创建Trigger, 当 TB_1 发生变化时,变化的信息(Insert ,Update,Delete)将保存于 TB_2 中,Update是两条记录,Update 之前和之后 都要保存盐类

Create trigger Trig_t2
On Tb_1
For Insert,Update,Delete
As
declare @id int,
@name_1 varchar(20),
@status varchar(20)

If not exists(Select 1 from deleted) ----Insert
Begin
select @id=id, @name_1=name_1,@status=status from inserted
insert into tb_2(id,name_1,status,type)values(@id,@name_1,@status,'Insert')
End

If exists(select 1 from inserted) and exists(select 1 from deleted) ---Update
Begin
/* Update Before */
select @id=id, @name_1=name_1,@status=status from deleted
insert into tb_2(id,name_1,status,type)values(@id,@name_1,@status,'UpdateBefor')

/* Update End */
select @id=id, @name_1=name_1,@status=status from inserted
insert into tb_2(id,name_1,status,type)values(@id,@name_1,@status,'UpdateEnd')
End

If not exists(select 1 from inserted) ---Delete
Begin

select @id=id, @name_1=name_1,@status=status from inserted
insert into tb_2(id,name_1,status,type)values(@id,@name_1,@status,'Delete')
End

----测试----

insert into tb_1(id,name_1,status)values('1','1','1')
select * from tb_1
select * from tb_2

id name_1 status type
----------- -------------------- -------------------- --------------------------------------------------
1 1 1 NULL

(1 row(s) affected)

id name_1 status type
----------- -------------------- -------------------- --------------------------------------------------
1 1 1 Insert

-----------测试Update---------------

update tb_1 set name_1='2'where id='1'

select * from tb_1
select * from tb_2

id name_1 status type
----------- -------------------- -------------------- --------------------------------------------------
1 2 1 NULL

(1 row(s) affected)

id name_1 status type
----------- -------------------- -------------------- --------------------------------------------------
1 1 1 Insert
1 1 1 UpdateBefor
1 2 1 UpdateEnd



查看完整回答
反对 回复 2022-05-09
?
达令说

TA贡献1821条经验 获得超6个赞

用插入触发器
要添加记录的设表名为thistable,要用触发器修改的另一个表为TABLE_OTHER,为叙述简便,设置其结构相同,都有三个字段,字段名为field1,field2,field3,
则通过下面的触发器,可以实现一个插入命令同时给两个表添加记录。
create trigger ins_triggername on thistable FOR insert
as
begin
DECLARE @FIELD1 VARCHAR(10),@FIELD2 INT,@FIELD3 FLOAT

SELECT @FIELD1=FIELD1,@FIELD2=FIELD2,@FIELD3=FIELD3 FROM INSERTED

INSERT INTO TABLE_OTHER SELECT @FIELD1,@FIELD2,@FIELD3
end
go



查看完整回答
反对 回复 2022-05-09
  • 2 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信