|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT有如许一个请求,它要创立一个SQLServer查询,个中包含基于事务时候的累计值。典范的例子就是一个银行账户,由于你每次都是在分歧的工夫往存钱和取钱。对恣意一个账户来讲,在某个工夫点都要算出它的借(存款)和贷(存款)之和。每笔买卖以后,你都想晓得以后的余额。列表A创立了如许一个表格的复杂的例子。
以下为援用的内容:
CREATETABLE[dbo].[BankAccount](
[TransactionID][int]IDENTITY(1,1)NOTNULL,
[TransactionDateTime][datetime]
NOTNULLCONSTRAINT[DF_BankAccount_TransactionDateTime]
DEFAULT(getdate()),[Amount][money]
NOTNULLCONSTRAINT[DF_BankAccount_Amount]
DEFAULT((0)),[TransactionType][char](1)
COLLATESQL_Latin1_General_CP1_CI_ASNOTNULL,
[AccountNumber][varchar](50)COLLATESQL_Latin1_General_CP1_CI_ASNULL,
CONSTRAINT[PK_BankAccount]PRIMARYKEYCLUSTERED
(
[TransactionID]ASC
)WITH(PAD_INDEX=OFF,IGNORE_DUP_KEY=OFF)ON[PRIMARY]
)ON[PRIMARY]
列表A
上面是一些示例行:
12006-11-0302:33:42.34010000.00
22006-11-0302:34:50.467-500.00
32006-11-0302:35:04.857250.00
42006-11-0302:42:19.763-124.25
由于日期是缺省设定的,你要做的就是到场一些金额。例子中为了复杂起见,假定只要一个银行账户(为了更切合实践情形,能够增加一个BankAccountNumber列)。
如今你就可以够创立一个包含了以后余额的查询。由于你已在统一列顶用正正数值纪录了存款和存款值,以是列中的累计值是很简单算出的。你要失掉以后的余额,就要盘算出之前一切买卖的总值,然后将这个值和以后的买卖相加。列表B中的查询完成了这一点。
以下为援用的内容:
SELECT
transactionid,
transactiondatetime,
amount,
(SELECTSUM(amount)
FROMdbo.bankaccountasD1
WHERED1.transactiondatetime<=D0.transactiondatetime)ASbalance
FROMdbo.bankaccountASD0
列表B
如许就失掉了以下的了局集:
12006-11-0302:33:42.34010000.0010000.00
22006-11-0302:34:50.467-500.009500.00
32006-11-0302:35:04.857250.009750.00
42006-11-0302:42:19.763-124.259625.75
如这个例子所示,只需你了解了请求,就能够很简单地创建累计值。所示的例子假定表格中只包含一个账户,可是要处置多个账户也很复杂。增加一个BankAccountNumber列和一个指定利钱数目的WHERE谓词便可。
你也能够把这个例子倒过去用,如在一个存货盘算中创立一个分歧的运转。你从存货1,000入手下手,然后减往各类花消和收条。
如许的查询有两个长处:
你不必要贮存了局。当用账户编号或外键操纵时,实行能够如闪电般敏捷。
你以一个标签停止事件,它能够逐行举行反省。假如呈现成绩的话,你能够将招致成绩呈现的事件断绝。
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的: |
|