我正在使用一个触发器,该触发器将插入大多数存在的值。我在触发器本身中静态放置的减号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变量找到。
我想在“选定”列中插入新的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
表的条目。