首页 >数据库 >mysql教程 >master..spt_values如何在SQL Server中高效分割逗号分隔值?

master..spt_values如何在SQL Server中高效分割逗号分隔值?

Susan Sarandon
Susan Sarandon原创
2024-12-30 14:20:11565浏览

How Can master..spt_values Efficiently Split Comma-Separated Values in SQL Server?

使用 master..spt_values 拆分列

背景:查找表和投影

Master..spt_values 是 Microsoft SQL Server 中的系统表,包含系统存储过程使用的各种查找和投影表。它通过提供预定义的数字、位掩码和其他常用值序列来实现高效的数据操作。

查找表允许将数值扩展为其相应的字符串表示形式,例如将锁定类型从数字转换为名称。另一方面,投影表提供了一种迭代一系列值的方法,这对于将列拆分为多行非常有用。

Type = "P": Projection Table

在master中输入“P”..spt_values表示一个投影表。它包含从0到2047的连续数字序列。该表可以有效地通过各种操作(例如计数或聚合)投影一组值。

使用类型“P”进行列拆分的好处

使用 master..spt_values 的好处(输入“P”)用于分割CSV列在于它的性能和效率。通过利用预先计算的数字序列,SQL Server 可以避免创建和插入临时表,如果序列是动态生成的,则这是必要的。这可以显着提高执行列拆分操作的查询的执行速度。

代码示例

相关代码演示了如何使用 master..spt_values 将 CSV 列拆分为多行:

SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway

此代码利用 master..spt_values 中的类型“P”表来创建一个数字序列, соответствует CSV 列 (col4) 中的每个字符。然后,它使用这些数字根据逗号分隔符将列拆分为行。

以上是master..spt_values如何在SQL Server中高效分割逗号分隔值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn