Надеемся, что это простой вопрос, связанный с оптимизацией производительности, когда речь идет о запросах в Sql 2008.
Я работал для компаний, которые часто используют Stored Procs для своих процессов ETL, а также для некоторых своих веб-сайтов. Я видел сценарий, в котором им нужно извлекать конкретные записи на основе конечного набора ключевых значений. Я видел, как он обрабатывается тремя различными способами, что показано ниже с помощью псевдокода.
Динамический Sql, который объединяет строку и выполняет ее.
EXEC('SELECT * FROM TableX WHERE xId IN (' + @Parameter + ')'
Использование пользовательской функции для разделения строки с разделителями на таблицу
SELECT * FROM TableY INNER JOIN SPLIT(@Parameter) ON yID = splitId
ИСПОЛЬЗОВАНИЕ XML в качестве параметра вместо значения varchar с разделителями
SELECT * FROM TableZ JOIN @Parameter.Nodes(xpath) AS x (y) ON ...
Хотя я знаю, что создание динамического sql в первом фрагменте является плохой идеей по большому количеству причин, мое любопытство исходит из последних 2 примеров. Лучше ли в моем коде должным образом усердно передавать такие списки через XML, как в фрагменте 3, или лучше просто разграничить значения и использовать udf для этого?