2009-09-20 4 views
0

У меня есть следующий запросSQL Server 2008 - за исключением строк

DECLARE @ProductIdsToExclude NVARCHAR (макс)

SET @ProductIdsToExclude = «49506541-4CE2-40AC-812A-7AB262E6F0B0,49506541-4ce2- 40ac-812A-7ab262e6f0b0'

Я затем с помощью this функции для анализа @ProductIdsToExclude к временной таблице:

CREATE TABLE

#TempProductIdsToExclude (PRODUCTID UniqueIdentifier) ​​

ВСТАВИТЬ

#TempProductIdsToExclude (ProductID)

ВЫБОР

t.txt_value

ОТ

dbo.fn_ParseText2Table (@ProductIdsToExclude, ''), как т

Я затем использовать этот запрос, чтобы вытащить все продукты:

SELECT * FROM Products

Мой вопрос - как я могу получить запрос к исключить все результаты, где ProductId в Продукты Таблица содержится в пределах #TempProductIdsToExclude

спасибо!

ответ

2

Использование where not exists:

select * 
    from Products prod with (nolock) 
where not exists (select 1 
        from #TempProductIdsToExclude temp 
        where temp.ProductId = prod.ProductId) 
+0

спасибо - работает удовольствие! – db1234

+0

Из любопытства, зачем использовать «с (nolock)»? – Diego

+0

По умолчанию вся таблица 'Products' будет заблокирована при запуске' select', т. Е. Никакие другие запросы не смогут получить к ней доступ. 'с (nolock)' отключает эту блокировку, чтобы разрешить параллельный доступ. Недостатком является то, что если данные таблицы изменяются, когда выполняется 'select', результаты могут отличаться от ожидаемых. –

0

Вы могли бы использовать:

select * from products where productId not in (select productId from) #TempProductIdsToExclude) 
Смежные вопросы