У меня есть запрос, где я отправляю TableType с столбцами EmpKey
и TaskId
, например:
@AssignNotificationTableType [dbo].[udf_TaskNotification] READONLY
INSERT INTO [TaskNotification] ([TaskId], [EmpKey])
SELECT
[ANT].[TaskId], [E].[EmpKey]
FROM
@AssignNotificationTableType AS [ANT]
INNER JOIN
[Employee] AS [E] ON [ANT].[EmpGuid] = [E].[EmpGuid]
Итак, моя таблица выглядит следующим образом:
+--------------------------------------+--------------------------------------+--------+
| TaskNotificationId | TaskId | EmpKey |
+--------------------------------------+--------------------------------------+--------+
| EEE3D3F8-F190-E811-841F-C81F66DACA6A | D0440DEB-404C-4006-870F-E95BFFA840E0 | 44 |
| EFE3D3F8-F190-E811-841F-C81F66DACA6A | D0440DEB-404C-4006-870F-E95BFFA840E0 | 49 |
+--------------------------------------+--------------------------------------+--------+
каквы можете видеть, что два элемента имеют одинаковые TaskId
, но разные Empkey
, поэтому, если я отправлю снова один и тот же TaskId
D0440DEB-404C-4006-870F-E95BFFA840E0
, я хочу вставить только строку, только если EmpKey не существует в этом TaskId
Поэтому, если я отправлю что-то вроде:
+--+--------------------------------------+--------+
| | TaskId | EmpKey |
+--+--------------------------------------+--------+
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 44 |
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 49 |
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 54 |
+--+--------------------------------------+--------+
Он будет вставлять только последнюю строку, потому что EmpKey
54 не существует в этом TaskId
Я пытаюсь сделать в WHERE
предложение с NOT IN
как:
INSERT INTO [TaskNotification] ([TaskId], [EmpKey])
SELECT
[ANT].[TaskId], [E].[EmpKey]
FROM
@AssignNotificationTableType AS [ANT]
INNER JOIN
[Employee] AS [E] ON [ANT].[EmpGuid] = [E].[EmpGuid]
WHERE
[E].[EmpKey] NOT IN (SELECT EmpKey
FROM [TaskNotification]
WHERE TaskId = (SELECT TaskId
FROM @AssignNotificationTableType))
Но когда я запускаю его, он просто ничего не вставляет.Что я делаю неправильно?Привет