【发布时间】:2023-04-08 23:55:01
【问题描述】:
希望这只是一个简单的问题,涉及 Sql 2008 中的查询时的性能优化。
我曾为那些在 ETL 流程以及他们的一些网站中大量使用存储过程的公司工作过。我已经看到了他们需要根据一组有限的键值检索特定记录的场景。我已经看到它以 3 种不同的方式处理,如下面的伪代码所示。
连接字符串并执行它的动态 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 ...
虽然出于多种原因,我知道在第一个 sn-p 中创建动态 sql 是一个坏主意,但我的好奇心来自最后两个示例。在我的代码中进行尽职调查以通过 XML 传递此类列表(如在 sn-p 3 中)是否更精通,还是仅分隔值并使用 udf 来处理它更好?
【问题讨论】:
标签: sql xml sql-server-2008