У меня есть триггер, который я работаю, чтобы вставить значения, в основном присутствующие. Минус 2, что я статически помещаю в сам триггер. Триггер работает нормально, но повторяет много вставок, и я не могу понять, почему. В этом конкретном случае я хочу, чтобы он вставлял значения, основанные на вещах, еще не вставленных в таблицу на основе триггера.
Я выбираю два значения из одной таблицы и 3 из таблицы триггеров. Я хочу вставить новый GUID и номер 0 в столбце «выбранные» для всех значений, НЕ найденных в таблице триггеров. В этом случае можно выбрать только 10 .. (10 строк в таблице [CIF_SublineType]
). Поэтому, если вставить 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 направляющих, и в зависимости от того, что не вставлено, триггер сравнивает их и вставляет их из таблицы CIF_SublineType.
/* 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';
они найдены с использованием переменной MCAL выше из таблицы CIF_Subline.