我正在考虑在我的系统中提供数据库级别的更改跟踪。我需要能够跟踪实体级别的更改,而不仅仅是单个表。
现在,我们在每个感兴趣的表上都有触发器,将表 PK 写入Change_Event表中。然后我们可以查询该表,并将其归结为代表整个实体的 PK。然后,我们可以检索该实体的数据并对其执行相关操作。
作为示例,请考虑以下(简化的)示例:
CREATE TABLE Employee
(
Id INT IDENTITY PRIMARY KEY,
Name VARCHAR(250) NOT NULL,
Telephone VARCHAR(15) NOT Null
);
CREATE Table Visit
(
Id INT IDENTITY PRIMARY KEY,
VisitDate DATETIME2 Not NULL,
[Address] VARCHAR(500) NOT NULL,
VisitorId INT NOT NULL,
CONSTRAINT FK_Visit_VisitorId FOREIGN KEY (VisitorId) REFERENCES Employee (Id)
);
INSERT into Employee (Name, Telephone)
VALUES ('John Doe', '123456789'),
('Jane Smith', '999555333');
INSERT INTO Visit (VisitDate, Address, VisitorId)
VALUES (SYSDATETIME(), '123 Fake St', 1), …Run Code Online (Sandbox Code Playgroud) sql-server sql-server-2008-r2 change-tracking change-data-capture
我的服务器上有一个 Sql 作业,它每晚从远程服务器触发(一旦它完成了备份)。
我已成功配置作业以在失败时通知我,但我想设置警报以在作业未触发时通知我。即当远程服务器无法触发我的工作时。
这可能吗?我查看了设置,所有警报等都与作业失败/成功时有关。
我可以将作业设置为在完成时发出警报(无论状态如何),我一开始就是这样做的(我一开始就是这样做的),但我宁愿不收到连续的电子邮件(毕竟,我可能只是开始忽略它们)。
我们有一个怪物视图,其中包含与许多(许多)表的联接,以便返回所需的数据。在某些情况下,为了获取一列信息,我们必须连接到 4 个表,只是为了获取我们需要的值(数据库结构不是很好,我们无法更改它)。
为了提高性能,我提取了某些组件并将它们构建到自己的视图中,以简化执行计划,并希望优化查询。
如果我编写一个将这些视图连接在一起的查询,我是否会失去每个视图的查询优化的好处?即,我最终会回到开始的地方,将视图组合成单个选择,还是因为它们彼此原子地起作用,所以它本身会表现得更好?