希望这只是一个简单的问题,涉及到Sql 2008查询的性能优化。
我曾为那些在其ETL过程和部分网站中广泛使用Stored Procs的公司工作。我见过需要根据有限一组关键值检索特定记录的情况。下面是伪代码所示的三种不同处理方式。
动态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是一个不好的想法,原因众多,但是我的好奇心来自最后两个示例。在我的代码中通过XML传递此类列表是否更有效,就像片段3中一样,还是最好仅限制值并使用udf来处理它?