Предотвращение дублирования вставок в таблицу

База данных - это SQL Server 2008. У меня есть запрос, который извлекает строки из одной или нескольких таблиц и затем пытается вставить их в переменную таблицы.

I Мне нужен эффективный способ предотвращения повторяющихся вставок, поэтому я придумал следующее:

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 до того, как этот оператор был запущен,но не предотвратит дублирование, если FROM / INNER JOIN на SomeTable / SomeOtherTalbe приведет к дублированию SomeID.

Помимо простого добавления DISTINCT к оператору SELECT, есть ли другой более эффективный способ справиться с этим?

5
задан bobs 1 February 2013 в 01:27
поделиться