Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在字段上创建事务和触发器_Sql Server_Vb.net - Fatal编程技术网

Sql server 在字段上创建事务和触发器

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

请注意,我是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
);

我正在尝试创建一个“事务和触发器”,它将根据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 

最好在查询中执行此操作并避免触发。触发器主要用于开发后添加和可选功能。要求不明确。要插入到
服务器计数器中的值是多少?你怎么计算呢?