数据库是 SQL Server 2008。我有一个查询,它从一个或多个表中提取行,然后尝试将它们插入到表变量中。
我想要一种防止重复插入的有效方法,所以我想出的是:
INSERT INTO @MyTableVariable
SELECT SomeID
FROM SomeTable st
INNER JOIN SomeOtherTable sot ON sot.SomeID = st.SomeID
LEFT JOIN @MyTableVariable t ON t.SomeID = sot.SomeID
WHERE t.SomeID IS NULL
但是,这似乎并不能防止在某些情况下重复插入。
似乎(如果您考虑一下并查看查询计划,这是有道理的)在左连接操作中仅使用了 @MyTableVariable 的初始“状态”。换句话说,如果在运行此语句之前@MyTableVariable 已经包含 SomeID,这将防止重复,但如果 SomeTable/SomeOtherTalbe 上的 FROM/INNER JOIN 导致重复的 SomeID,则不会防止重复。
除了简单地在 SELECT 语句上打一个 DISTINCT 之外,还有另一种更有效的方法来处理这个问题吗?