我有一个查询,我发送一个具有列的 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的内容,则仅当该 TaskId 中不存在 EmpKey 时才想插入行
所以如果我发送类似的东西:
+--+--------------------------------------+--------+
| | TaskId | EmpKey |
+--+--------------------------------------+--------+
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 44 |
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 49 |
| | D0440DEB-404C-4006-870F-E95BFFA840E0 | 54 |
+--+--------------------------------------+--------+
它只会插入最后一行,因为EmpKey 54 不存在TaskId
我尝试用 as 来做 inWHERE子句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))
但是当我运行它时,它只是不插入任何东西。我究竟做错了什么?问候