База данных - 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, перед выполнением этого оператора, но не предотвратит дубликаты, если FROM / INNER JOIN в SomeTable / SomeOtherTalbe приведет к дублированию SomeID.
Помимопросто добавив DISTINCT к оператору SELECT, есть ли другой более эффективный способ справиться с этим?