在插入触发器后使用,仅插入特定的值和特定的行集

问题描述 投票:0回答:1

我正在使用一个触发器,该触发器将插入大多数存在的值。我在触发器本身中静态放置的减号2。触发器执行得很好,但是它会重复许多插入操作,我不知道为什么。在此特定实例中,我希望它根据尚未插入基于触发器的表中的内容插入值。

我从一个表中选择两个值,并从触发器表中选择3个值。我想在触发器表中未找到的所有值的“选定”列中插入新的GUID和数字0。在这种情况下,..([CIF_SublineType]表中的10行)只有10个可供选择。因此,如果要插入2行,我将尝试仅插入其他8行。但是此当前设置最多插入100条左右。相同的值

我已经尝试过此触发器的多种变体,但有些却无济于事。其他人给我同一行的倍数。

ALTER TRIGGER [dbo].[UpdateUniqSubLineType]
ON  [GTU_Apps].[dbo].[TestTableCIF] 
AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO GTU_Apps.dbo.TestTableCIF (UniqSublineID, UniqSublineType, UniqLineType, UniqLine, UniqPolicy, Selected, LineName)
        SELECT DISTINCT
            NEWID(), SLT.UniqSublineType, TT.UniqLineType, TT.UniqLine, 
            TT.UniqPolicy, 0, SLT.SubLine_Name 
        FROM 
            [GTU_Apps].[dbo].[CIF_SublineType] AS SLT 
        LEFT OUTER JOIN
            GTU_Apps.dbo.TestTableCIF AS TT ON SLT.UniqLineType = TT.UniqLineType 
        WHERE
            SLT.SubLine_Name <> TT.LineName 
            AND LT.UniqLineType = TT.UniqLineType
END

我想显示表[CIF.SublineType]的屏幕截图,因此您可以看到我只是在尝试插入触发器表中尚未存在的值。在这种情况下TestTableCIF,但我不知道如何上传图像。任何帮助将不胜感激

编辑。使用插入的表:

ON  [GTU_Apps].[dbo].[TestTableCIF] 
   AFTER INSERT
AS 
BEGIN

INSERT INTO GTU_Apps.dbo.TestTableCIF 
(UniqSublineID, UniqSublineType, UniqLineType, UniqLine, UniqPolicy, Selected, LineName)

SELECT distinct
NEWID(), SLT.UniqSublineType, i.UniqLineType, i.UniqLine, i.UniqPolicy, 0, SLT.SubLine_Name 

FROM 
inserted as i 
join [GTU_Apps].[dbo].[CIF_SublineType] AS SLT ON
i.LineName = SLT.SubLine_Name AND i.UniqLineType = SLT.UniqLineType
where i.UniqSublineType <> SLT.UniqSublineType

END

下面对此进行编辑以发表评论。UniqLineType是用于提取所有UniqSublineTypes的键。这是存储的10个Guid,并且根据未插入的内容,触发器会进行比较,然后从CIF_SublineType表中插入这些Guid。

  /* MCAL subline GUIDs */
    public string mcalBIPD = "151743CE-4750-44C1-A950-613057C1D892";
    public string mcalHired = "F4916ABE-8FFB-4DC4-A546-32603647781B";
    public string mcalNonOwned = "8FA5A75E-71D1-44BD-91EA-0B14F7D08FF6";
    public string mcalPIP = "4F5AC1A8-0BC9-437C-B16A-4DA64B7FE28B";
    public string mcalAddPIP = "6FE73B23-D437-4FC4-83DE-2751B0966A80";
    public string mcalMedPayments = "BB9307AD-EE95-4703-BF45-C482E09537E6";
    public string mcalUMPD = "E23DAAE0-3E4F-4A52-8A2F-C01501CD0295";
    public string mcalUMCSL = "1228C123-32CF-483E-8F8B-3F7B01ABF53A";
    public string mcalUIMCSL = "04096A7A-E42A-4D6A-B0AE-49B832005C41";
    public string mcalTerror = "7EF66420-060C-49E7-AC81-06C5ECB6CC2F";
    var MCAL = '5cc3cb18-5b52-454d-88c7-2670501946b4';

这些可以使用上面的CIF_Subline表中的MCAL变量找到。

sql-server triggers
1个回答
0
投票

我想在“选定”列中插入新的GUID和数字0对于在触发器表中找不到的所有值。

尝试一下:

INSERT INTO GTU_Apps.dbo.TestTableCIF 
(UniqSublineID, UniqSublineType, UniqLineType, UniqLine, UniqPolicy, Selected, LineName)

SELECT distinct
NEWID(), SLT.UniqSublineType, i.UniqLineType, i.UniqLine, i.UniqPolicy, 0, SLT.SubLine_Name 

FROM 
[GTU_Apps].[dbo].[CIF_SublineType] AS SLT 
left join inserted i on i.UniqSublineType = SLT.UniqSublineType
where i.UniqSublineType is null

select语句将获取所有不适合inserted表的条目。

© www.soinside.com 2019 - 2024. All rights reserved.