Я использую хранимую процедуру для извлечения данных, и мне нужно было динамически фильтровать. Например, если я не хочу получать какие-либо данные с идентификатором 5, 10 или 12, я отправляю их в виде строки в процедуру и преобразую в таблицу с помощью определенной пользователем функции. Но я должен учитывать производительность, поэтому вот пример:
Решение 1:
SELECT *
FROM Customers
WHERE CustomerID NOT IN (SELECT Value
FROM dbo.func_ConvertListToTable('4,6,5,1,2,3,9,222',','));
Решение 2:
CREATE TABLE #tempTable (Value NVARCHAR(4000));
INSERT INTO #tempTable
SELECT Value FROM dbo.func_ConvertListToTable('4,6,5,1,2,3,9,222',',')
SELECT *
FROM BusinessAds
WHERE AdID NOT IN (SELECT Value FROM #tempTable)
DROP TABLE #tempTable
Какое решение лучше для производительности?