如何在触发器中使用时间?

yjmking 2003-08-21 01:26:13

A表字段如下:日期 班号 投料量
B表 :日期 投料次数 投料量合计
我想做一个触发器,在A表中插入一条新纪录后,自动在B表中次数加1,投料量合计加上新的投料量。
问题是:我想先判断B表中是否存在当天(日期字段)的值,如果不存在,则首先在B表中新建,如果存在,
则直接更新次数和合计。
...全文
51 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjmfdm 2003-08-25
  • 打赏
  • 举报
回复
insert B (日期,班号,投料量次数,投料量合计) select 日期,班号,1,投料量 from inserted where cast(日期 as char(10))+班号 not in (select cast(日期 as char(10))+班号 from B )
yjmking 2003-08-22
  • 打赏
  • 举报
回复
to pengdali(大力 V2.0) :
班号的条件怎么加呢?班号有三种:“白班”“中班”“夜班”
pengdali 2003-08-22
  • 打赏
  • 举报
回复
忘了not in的bug


CREATE TRIGGER 名1 ON a
FOR INSERT
AS
update b set 投料次数=投料次数+1,投料量合计=tem.投料量 from inserted tem where tem.日期=b.日期
insert b (日期,投料次数,投料量合计) select 日期,1,投料量 from inserted where 日期 not in (select 日期 from b where 日期 is not null)
go
pengdali 2003-08-22
  • 打赏
  • 举报
回复
CREATE TRIGGER 名1 ON a
FOR INSERT
AS
update b set 投料次数=投料次数+1,投料量合计=tem.投料量 from inserted tem where tem.日期=b.日期
insert b (日期,投料次数,投料量合计) select 日期,1,投料量 from inserted where 日期 not in (select 日期 from b where 日期 is not null)
go
yjmking 2003-08-22
  • 打赏
  • 举报
回复
B表的问题已经解决了。
现在有C表:日期 班号 投料次数 投料量合计,
需要根据A表中的日期和班号来更新C表中的次数和合计。我用 pengdali(大力 V2.0)的语句update可以,insert不行,我想是条件不对
if(select 班号 from inserted)='白班'
update......
insert C (日期,班号,投料次数,投料量合计) select 日期,'白班',1,投料量 from inserted where 日期 not in (select 日期 from b) and 班号 not in (select 班号 from C)
if(select 班号 from inserted)='中班'
update......
insert C (日期,班号,投料次数,投料量合计) select 日期,'中班',1,投料量 from inserted where 日期 not in (select 日期 from b) and 班号 not in (select 班号 from C)

yjmking 2003-08-22
  • 打赏
  • 举报
回复
使用两个 not in 就出问题了,怎么办?
yjmking 2003-08-22
  • 打赏
  • 举报
回复
老大,不行呀,我加入2003-8-8,白班,20,数据可以新建到B表中,如果再新建2003-8-8,中班,40,就不行了,我需要根据日期和班号来决定是更新还是新建,老大,救救我吧。
yjmking 2003-08-22
  • 打赏
  • 举报
回复
可是我需要根据班号和日期来判断是否新建或更新呀,
pengdali 2003-08-22
  • 打赏
  • 举报
回复
FOR INSERT
AS
update b set 投料次数=投料次数+1,投料量合计=tem.投料量 from inserted tem where tem.日期=b.日期 and tem.班号=b.班号
insert b (日期,班号,投料次数,投料量合计) select 日期,班号,1,投料量 from inserted where 日期 not in (select 日期 from b where 日期 is not null)
go
gujianxin 2003-08-21
  • 打赏
  • 举报
回复
getdate() 比较
pengdali 2003-08-21
  • 打赏
  • 举报
回复
不需要if

你在update 时加 where
insert 时也加 where 不就可以了。
8992026 2003-08-21
  • 打赏
  • 举报
回复
改成:

if exists (select 1 from B where 日期=@TempDate)
试试

有一个问题,你的日期字端的数据是不是有时间,如果有,那就应该用
if exists (select 1 from B where datediff(day,日期,@TempDate)=0)




yjmking 2003-08-21
  • 打赏
  • 举报
回复
to 8992026(8992026) :我的if条件为什么不行?
8992026 2003-08-21
  • 打赏
  • 举报
回复
set @TempWeight=(select [投料量] from inserted)
set @TempDate=(select [日期] from inserted)

-->

select @TempWeight=[投料量] from inserted
select @TempDate=[日期] from inserted

不过你这么写,一次只能插入一条纪录,一次插入多条纪录有问题的。

yjmking 2003-08-21
  • 打赏
  • 举报
回复
我的条件为什么不行?能不能调试触发器呀!!!!
hjb111 2003-08-21
  • 打赏
  • 举报
回复
create Trigger T_AddTableB on TableA for Insert
as
if (select convert(varchar max(日期),120) from B)=convert(varchar,getdate(),120)
begin
Update TableB set ...
...
end
else
begin
insert TableB select ....
..
end

go


helodd 2003-08-21
  • 打赏
  • 举报
回复
create trigger on A for insert
as
begin
declare @Count int,@Sum int
if exists(select * from b where datediff(D,日期,getdate())=0)
begin
select @Count=投料次数,@Sum=投料量合计 from B
where datediff(D,日期,getdate())=0
update B set 投料次数=@count+1,投料量合计=@Sum+(select 投料量 from inserted)
where datediff(D,日期,getdate())=0
end else
begin
insert into B(日期,投料次数,投料量合计) select 日期,1,投料量 from inserted
end
end
yjmking 2003-08-21
  • 打赏
  • 举报
回复
忘了说明一下:不一定是当天的值,插入随便任意一天,现在是if(select count(*) from B where 日期=@TempDate)>0不行,有正确答案吗?
pengdali 2003-08-21
  • 打赏
  • 举报
回复
CREATE TRIGGER 名1 ON a
FOR INSERT
AS
update b set 投料次数=投料次数+1,投料量合计=tem.投料量 from inserted tem where tem.日期=b.日期
insert b (日期,投料次数,投料量合计) select 日期,1,投料量 from inserted where 日期 not in (select 日期 from b)
go
TaoGeGe 2003-08-21
  • 打赏
  • 举报
回复
CREATE TRIGGER [TRIGGER NAME] ON [dbo].[A]
FOR INSERT, UPDATE
AS
.
.
.
DECLARE @intFlag varchar(1)
SET @intFlag='0'
SELECT @intFlag='1' FROM B WHERE convert(varchar(10),isnull(日期,'1900-01-01'),120)=convert(char(10),getdate(),120)
if @intFlag='1'
begin
update ...
...
end
else
begin
....Insert...
end
加载更多回复(4)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧