小编Yip*_*ing的帖子

使用触发器进行同步

我有一个类似于之前讨论的要求:

我有两张桌子,[Account].[Balance]并且[Transaction].[Amount]

CREATE TABLE Account (
      AccountID    INT
    , Balance      MONEY
);

CREATE TABLE Transaction (
      TransactionID INT
     , AccountID    INT
    , Amount      MONEY
);
Run Code Online (Sandbox Code Playgroud)

当对[Transaction]表进行插入、更新或删除操作时,[Account].[Balance]应根据[Amount].

目前我有一个触发器来完成这项工作:

ALTER TRIGGER [dbo].[TransactionChanged] 
ON  [dbo].[Transaction]
AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
IF  EXISTS (select 1 from [Deleted]) OR EXISTS (select 1 from [Inserted])
    UPDATE [dbo].[Account]
    SET
    [Account].[Balance] = [Account].[Balance] + 
        (
            Select ISNULL(Sum([Inserted].[Amount]),0)
            From [Inserted] 
            Where [Account].[AccountID] = [Inserted].[AccountID]
        )
        - …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server transaction acid data-synchronization

11
推荐指数
1
解决办法
5159
查看次数

我应该使用 int 列来表示日期吗?

我正在设计一个 Invoice 表,并希望帮助决定几个索引和主键。

  1. 对于主键 - 使用 GUID 对我来说听起来是个好主意,但这是否意味着子表也需要有这个 GUID 作为外键?

  2. 发票总是在创建日期使用日期范围进行过滤。因此,我计划使用一个额外的 int 列而不是 datetime 列,该列仅包含诸如“20160101”之类的日期信息,因为我认为比较 int 比 datetime 快得多并且对我有益。由于创建时间会不断增加,因此我也计划在此列上应用集群索引。这是一个好主意吗?

  3. 发票也可以根据客户查询,我应该在 CustomerID 上放置另一个索引还是与日期列组合?

index

0
推荐指数
1
解决办法
212
查看次数