set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[LZUpdate]
ON [dbo].[HYW_T_MQTXDY]
after update
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @id int
declare @sw numeric(20,3)
declare @sim char(11)
declare @LL numeric(20,3)
declare @LJLL numeric(20,3)
declare @LS numeric(20,3)
declare @GC numeric(20,3)
select @id= MQTXDY_N_ID from Inserted
select @sw= MQTXDY_N_SW from Inserted
select @sim = MQTXDY_C_SIM from Inserted
select @LL= SS_N_ssll from Inserted
select @LJLL= SS_N_LJLL from Inserted
select @LS= SS_N_LS from Inserted
select @GC = MQTXDY_N_JSH from Inserted
SET NOCOUNT ON;
insert into dbo.ST_RIVER_R(STCD,TM,Z,Q,ADDQ,XSAVV) values(@sim,getDate(),@sw+@GC,@LL,@LJLL,@LS)
-- Insert statements for trigger here
END
触发器代码如上,当更新HYW_T_MQTXDY的时候 插一条记录到ST_RIVER_R表。STCD,TM 是ST_RIVER_R表的主健,但是当我在网站上更新HYW_T_MQTXDY的记录时。总是抱错!
+ InnerException {"违反了 PRIMARY KEY 约束 'PK_ST_RIVER_R'。不能在对象 'ST_RIVER_R' 中插入重复键。\r\n语句已终止。"} System.Exception {System.Data.SqlClient.SqlException}
可是我的主健TM 用的是Getdate()阿,怎么会重复呢?
现在就是这个触发器总是抱错,该怎么解决?
set QUOTED_IDENTIFIER ON
GO-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[LZUpdate]
ON [dbo].[HYW_T_MQTXDY]
after update
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
declare @id int
declare @sw numeric(20,3)
declare @sim char(11)
declare @LL numeric(20,3)
declare @LJLL numeric(20,3)
declare @LS numeric(20,3)
declare @GC numeric(20,3)
select @id= MQTXDY_N_ID from Inserted
select @sw= MQTXDY_N_SW from Inserted
select @sim = MQTXDY_C_SIM from Inserted
select @LL= SS_N_ssll from Inserted
select @LJLL= SS_N_LJLL from Inserted
select @LS= SS_N_LS from Inserted
select @GC = MQTXDY_N_JSH from Inserted
SET NOCOUNT ON;
insert into dbo.ST_RIVER_R(STCD,TM,Z,Q,ADDQ,XSAVV) values(@sim,getDate(),@sw+@GC,@LL,@LJLL,@LS)
-- Insert statements for trigger here
END
触发器代码如上,当更新HYW_T_MQTXDY的时候 插一条记录到ST_RIVER_R表。STCD,TM 是ST_RIVER_R表的主健,但是当我在网站上更新HYW_T_MQTXDY的记录时。总是抱错!
+ InnerException {"违反了 PRIMARY KEY 约束 'PK_ST_RIVER_R'。不能在对象 'ST_RIVER_R' 中插入重复键。\r\n语句已终止。"} System.Exception {System.Data.SqlClient.SqlException}
可是我的主健TM 用的是Getdate()阿,怎么会重复呢?
现在就是这个触发器总是抱错,该怎么解决?
而且每次都用getdate()怎么会主见重复呢?实在不明白
IF update(HYW_T_MQTXDY)
begin
insert into dbo.ST_RIVER_R(STCD,TM,Z,Q,ADDQ,XSAVV)
values(@sim,getDate(),@sw+@GC,@LL,@LJLL,@LS)
end
这个语句过不去
说列名 HYW_T_MQTXDY 无效?
HYW_T_MQTXDY---->表示字段名
意思是如果改这个字段,就执行if里面的代码
但是 insert为什么会有重复键值?getdate()时刻变化的。兄弟不明白阿。。
这个是自己写来测试的吗,感觉这样写会出问题呢。
1、你用getdate()做主键,你确定在同一时间只有一条数据插入?
2、你确定不考虑没有数据或者是同时多条数据的插入么?我的意思是用类似于这种语法:
insert into HYW_T_MQTXDY
select * from 表
where 条件
按常规在这里是要用@@ROWCOUNT取得inserted的行数并按三种情况判断的。
0条,这种也不是没可能,如果你的select子句没取得数据;
1条,理想的情况;
多条,当select子句取得多条数据;
在0条或多条的情况下,你的代码就会出现问题了。
当然,你说你能够用其它方式保证以上的情况不出现,就没有问题了,我只是提醒一下。