Sql server SQl触发器,插入的限制值

Sql server SQl触发器,插入的限制值,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,我有两张桌子: 表1:[文件编号],[数字],[数据] 表2:[文件编号],[行编号],[数字],[数据编号],[日期数据] 我想在表2中创建一个触发器: 将每个值添加到表2中,[Numerik]和[MaTune]的值应报告到表1中,其中[DocNo]类似 但如果我添加了第二个具有相同文档编号的值,我发现了一个错误。检查后,我发现了为什么当我询问更新日期/时间时,每个具有相同文档编号和行编号的文档都会报告更新日期/时间 我怎样才能只修改触发器中的值 这是我的密码: CREATE TRIGGER

我有两张桌子:

表1:[文件编号],[数字],[数据]

表2:[文件编号],[行编号],[数字],[数据编号],[日期数据]

我想在表2中创建一个触发器:

将每个值添加到表2中,[Numerik]和[MaTune]的值应报告到表1中,其中[DocNo]类似

但如果我添加了第二个具有相同文档编号的值,我发现了一个错误。检查后,我发现了为什么当我询问更新日期/时间时,每个具有相同文档编号和行编号的文档都会报告更新日期/时间

我怎样才能只修改触发器中的值

这是我的密码:

CREATE TRIGGER [dbo].[Tr_MAJ] 
   ON  [dbo].[Table2]
   AFTER INSERT,UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    --Déclaration des variables
    DECLARE @DocNo INT
    DECLARE @RowNo SMALLINT
    DECLARE @Numerik INT
    DECLARE @MaTune DECIMAL(15,2)
    DECLARE @DocNo_TheCat INT



   --Attribution des variables
    SELECT @DocNo = DocNo, @RowNo=RowNo, @Numerik = Numerik, @MaTune = Matune FROM inserted

   --Mise à jour de la date et l'heure dans Table2
    UPDATE Table2 SET Datedata= GETDATE() WHERE RowNo=@RowNo AND DocNo=@DocNo



   IF (SELECT MaTune from Table1 where DocNo=@DocNo) IS NULL
    BEGIN
        UPDATE Table1 SET MaTune = @MaTune, Numerik = @Numerik where DocNo=@DocNo
    END

    IF (SELECT MaTune from Table1 where DocNo=@DocNo) IS NOT NULL
        BEGIN

            --On attribue les nouvelles variables
            SELECT @DocNo_TheCat = DocNo, @RowNo=RowNo, @Numerik = Numerik, @MaTune = Matune FROM TheIxTable178 where DocNo=@DocNo  and RowNo=@RowNo and datedata = (select TOP 1 MAX(datedata) from Table2)

            UPDATE Table1 SET MaTune = @MaTune, Numerik = @Numerik where DocNo=@DocNo_TheCat
    END





END

当插入的表中有table2主键OK时,表示这些记录被修改、插入或更新, 因此,请尝试使用以下代码:

..... WHERE table2PK in (Select table2PK from inserted)
您需要使用集合操作

UPDATE t1 SET MaTune = mat
FROM inserted i 
JOIN table2 AS t2 ON i.docNO = t2.docno -- or whatever join conditions you assume that is OK!
JOIN table1 AS t1 ON t1.docNo = i.docno 

inserted可以包含多行。因此,SELECT@DocNo=…FROM inserted之类的赋值被破坏。我如何仅使用一次修改就可以限制inserted中的数据?事实上,如果在表2中插入新内容,表1会自动获取值DocNo,其他列将设置为NULL。您能告诉我在哪里使用:where table2PK i吗n从插入中选择table2PK在表2的触发器中,当您要更新任何其他表中的行时,您可以将目标表与插入的表连接起来,或使用WHERE子句筛选未受影响的行。。。