Sql server 在字段上创建事务和触发器
请注意,我是vb.net和sql server的新手,我在数据库中创建了两个名为Service和Trans的表Sql server 在字段上创建事务和触发器,sql-server,vb.net,Sql Server,Vb.net,请注意,我是vb.net和sql server的新手,我在数据库中创建了两个名为Service和Trans的表 Create Table Service( ServiceID int, ServiceName varchar(30), ServiceStartValue int ); Create Table Trans( EntryTS datetime, EntryCounter int, ServedTS datetime, ServedCounter int, Skipped int
Create Table Service(
ServiceID int,
ServiceName varchar(30),
ServiceStartValue int
);
Create Table Trans(
EntryTS datetime,
EntryCounter int,
ServedTS datetime,
ServedCounter int,
Skipped int
);
我正在尝试创建一个“事务和触发器”,它将根据ServiceID上EntryCounter中的值检查和更新ServedCounter,update语句不能允许ServedCounter>EntryCounter。我不太理解完整的要求,但下面是如何阻止更新(或插入)用一个扳机就不会发生
CREATE TRIGGER Trans_upd_trg ON Trans AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
--Don't allow the update
IF EXISTS(SELECT 1 FROM inserted WHERE ServedCounter > EntryCounter)
RAISERROR ('ServedCounter > EntryCounter', 16, 1 );
END
GO
在触发器的上下文中,有两个逻辑表,插入和删除。
这些表包含旧值和新值。(对于插入操作,“已删除”为空)
希望有帮助 使用
而不是触发器
CREATE TRIGGER Trans_upd_trg
ON Trans
Instead OF INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT *
FROM inserted
WHERE ServedCounter > EntryCounter)
AND EXISTS (SELECT *
FROM deleted)
UPDATE A
SET EntryTS = I.EntryTS,
EntryCounter = I.EntryCounter,
ServedTS = I.ServedTS,
ServedCounter = I.ServedCounter,
Skipped = I.Skipped
FROM Trans A
JOIN inserted I
ON A.EntryTS = I.EntryTS
AND A.ServedTS = I.ServedTS
WHERE i.ServedCounter > i.EntryCounter
ELSE
INSERT INTO Trans
SELECT *
FROM inserted
WHERE ServedCounter > EntryCounter
END
GO
最好在查询中执行此操作并避免触发。触发器主要用于开发后添加和可选功能。要求不明确。要插入到
服务器计数器中的值是多少?你怎么计算呢?