帮写一个触发器

tvppf8590 2012-05-21 05:02:01

我有2个表
表A
user isin amount
1 0 1
1 0 1
1 1 1
表B
user totalamount
1 1

需求是
当表A插入值的时候统计一次amount到表B的totalamount

条件 1.统计表A.user=B.user
2.当isin=0的时候加,ison=1的时候减

最终结果是两张表现在的值。
谢谢!
...全文
147 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tvppf8590 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

SQL code
create table a ([user] int,isin int,amount int)
create table b ([user] int,totalamount int)

go
insert a select 1,0,1 union all select 1,0,1 union all select 1,1,1
insert b select 1,1

cre……
[/Quote]


我把 instead of insert as 改成 for insert 就可以执行成功,不然就不成功,他们是什么区别呢
Felixzhaowenzhong 2012-05-21
  • 打赏
  • 举报
回复
create table a ([user] int,isin int,amount int)
create table b ([user] int,totalamount int)

go
insert a select 1,0,1 union all select 1,0,1 union all select 1,1,1
insert b select 1,1

create trigger tr_name
on table_name
instead of insert
as
begin
update B
set totalamount=m.amount
from(
select [user],sum(amount) as amount
from(select [user],case when isin=0 then amount else -amount end as amount from A) t
group by [user])as m
where m.[user]=B.[user]


insert into a select * from inserted

end
select * from b
/*
user totalamount
1 1
*/
drop table a
drop table b

--这个是我测试没有问题的
tvppf8590 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

[Quote=引用 8 楼 的回复:]
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
引用 4 楼 的回复:

SQL code

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount

from(
select u……
[/Quote]


create trigger Tr_IntegralJournalForTbuser
on dbo.Finance_IntegralJournal
instead of insert
as
begin
update dbo.User_TTBUser
set INTEGRAL=m.amount
from(
select TBNICK,sum(AMOUNT) as amount
from
(select TBNICK,
case when DIRECTION_FG=0 then AMOUNT else -AMOUNT end from dbo.Finance_IntegralJournal)
t
group by TBNICK) m
where m.TBNICK=dbo.User_TTBUser.NICK
end

消息 8155,级别 16,状态 2,过程 Tr_IntegralJournalForTbuser,第 6 行
没有为 't' 的列 2 指定任何列。
消息 207,级别 16,状态 1,过程 Tr_IntegralJournalForTbuser,第 9 行
列名 'AMOUNT' 无效。

Felixzhaowenzhong 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
引用 4 楼 的回复:

SQL code

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount

from(
select user,sum(amount) as amou……
[/Quote]


加上 “A”
tvppf8590 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
引用 4 楼 的回复:

SQL code

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount

from(
select user,sum(amount) as amount
from(select user,case when isin=0 ……
[/Quote]

create trigger Tr_IntegralJournalForTbuser
on dbo.Finance_IntegralJournal
instead of insert
as
begin
update dbo.User_TTBUser
set INTEGRAL=m.amount
from(
select TBNICK,sum(AMOUNT) as amount
from(select TBNICK,case when DIRECTION_FG=0 then AMOUNT else -AMOUNT end 这里是不是也少了表明A? ) t
group by TBNICK) m
where m.TBNICK=dbo.User_TTBUser.NICK
end
Felixzhaowenzhong 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:

SQL code

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount els……
[/Quote]


create trigger Tr_IntegralJournalForTbuser
on dbo.Finance_IntegralJournal
instead of insert
as
begin
update dbo.User_TTBUser
set INTEGRAL=m.amount
from(
select TBNICK,sum(AMOUNT) as amount
from(select TBNICK,case when DIRECTION_FG=0 then AMOUNT else -AMOUNT end) t
group by TBNICK) m
where m.TBNICK=dbo.User_TTBUser.NICK
end
你 少了一个 END
tvppf8590 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

SQL code

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount else -amount end)t
group ……
[/Quote]

create trigger Tr_IntegralJournalForTbuser
on dbo.Finance_IntegralJournal
instead of insert
as
begin
update dbo.User_TTBUser
set INTEGRAL=m.amount
from(
select TBNICK,sum(AMOUNT) as amount
from(select TBNICK,case when DIRECTION_FG=0 then AMOUNT else -AMOUNT) t
group by TBNICK) m
where m.TBNICK=dbo.User_TTBUser.NICK
end

消息 102,级别 15,状态 1,过程 Tr_IntegralJournalForTbuser,第 10 行
')' 附近有语法错误。

Felixzhaowenzhong 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code


go
create trigger test on A
for insert
as
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount else -amount)t
……
[/Quote]

借用一下 2楼的


create trigger tr_name
on table_name
instead of insert
as
begin
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount else -amount)t
group by user)m
where m.user=B.user

insert into a select * from inserted
end
  • 打赏
  • 举报
回复

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount else -amount end)t
group by user)mwherem.user=B.user

--更正一下
tvppf8590 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

可以在 A 上面创建一个 instead of insert 触发器 来实现
[/Quote]

创建触发器我知道,但是这种复杂的写不出来。。
  • 打赏
  • 举报
回复

go
create trigger test on A
for insert
as
update B
set totalamount=m.amount
from(
select user,sum(amount) as amount
from(select user,case when isin=0 then amount else -amount)t
group by user)mwherem.user=B.user
Felixzhaowenzhong 2012-05-21
  • 打赏
  • 举报
回复
可以在 A 上面创建一个 instead of insert 触发器 来实现
中文版目录总汇及内容提要 第一章. 企业应用中的作业调度 内容提要:什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案 第二章. Quartz 起步 内容提要:本章对 Quartz 框架一个快速的入门介绍,同时也大略指导你从哪里下载,构建和安装这个框架 第三章. Hello Quartz (第一部分) 内容提要:建立 Hello Quartz 工程,并创建一个 Quartz Job 类 ScanDirectoryJob. 第三章. Hello Quartz (第二部分) 内容提要:创建一个 Quartz Scheduler,关联上一个 Quartz Trigger 以编程方式调度前面编写的 ScanDirectoryJob 运行。 第三章. Hello Quartz (第三部分) 内容提要:通过配置 quartz.properties、quartz_jobs.xml 以声明的方式调度 ScanDirectoryJob 运行。 第三章. Hello Quartz (第四部分) 内容提要:让我们最后简单讨论打包一个用到了 Quarts 框架的应用程序的流程,需要依赖于哪些包,也以此来结束本章的内容。 第四章. 部署 Job (第一部分) 内容提要:介绍 Scheduler 和 SchedulerFactory 有哪些类型、SchedulerFactory 的关键 API 方法;以及如何通过 java.util.Properties 实例或默认 quartz.properties 文件创建 Scheduler。 第四章. 部署 Job (第二部分) 内容提要:如何管理 Scheduler(启动、停止、Standby 模式)。还介绍了 Job、JobExecutionContext、JobDetail、JobDataMap,及如何访问 JobDataMap 中的数据。有状态和无状态的 Job。 第四章. 部署 Job (第三部分) 内容提要:Job 的易失性、持久性和可恢复性,如何从 Scheduler 中移除、中断 Job。Quartz 已为我们提供了哪些 Job。最后是 Java 线程的简单介绍。 第四章. 部署 Job (第四部分) 内容提要:线程在 Quartz 中的用法,主处理线程:QuartzSchedulerThread 和 Quartz 工作者线程。Quartz Trigger 和 Calendar 各有哪些类型和如何使用。 第五章. Cron 触发器及相关内容 (第一部分) 内容提要:引入 Quartz CronTrigger 及简单使用 CronTrigger 来部署一个 Job 第五章. Cron 触发器及相关内容 (第二部分) 内容提要:详细介绍了 cron 表达式的格式和像 , - * ? / L W C # 特殊符号的使用 第五章. Cron 触发器及相关内容 (第三部分) 内容提要:CronTrigger 使用起(startTime) 迄(endTime) 日期的使用。TriggerUtils 简单方便的创建 Trigger。应用 JobInitializationPlugin 在 quartz_jobs.xml 配置文件中写 Cron 表达式。 第五章. Cron 触发器及相关内容 (第四部分) 内容提要:Cron 表达式 Cookbook,列举了各种 Cron 表达式的写法和意义,有助于更好的理解 Cron 表达式;还用了 TriggerUtils 创建了一个即刻触发的 Trigger。 第六章. Job 存储和持久化 (第一部分) 内容提要:介绍 Quartz 中的 Job 存储,JobStore 接口相关 API 方法。使用 RAMJobStore 来实现 Job 存储及它的优缺点。 第六章. Job 存储和持久化 (第二部分) 内容提要:使用持久性的 JobStore,可用类型 JobStoreTX 和 JobStoreCMT。持久性 JobStore 是通过数据库来完成的,哪可支持哪些数据及需要创建些什么表。 第六章. Job 存储和持久化 (第三部分) 内容提要:使用和配置 JobStoreTX,需要为不同数据库平台指定不同的驱动代理( DriverDelegate),和 quartz.properties 中与 JobStoreTX 相关配置说明。 第六章. Job 存储和持久化 (第四部分) 内容提要:为 JobStoreTX 通过在 quartz.properties 配置来创建数据源,并在 Scheduler 中使用数据源 第六章. Job 存储和持久化 (第五部分

22,207

社区成员

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

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