如何在 SQL Server 中将逗号分隔的列表转换为行

发布于

所以你有一个逗号分隔的列表,现在你需要把它插入到数据库中。但问题是,您需要将列表中的每个值插入到其自己的表行中。因此,基本上,您需要将列表拆分为其单独的值,然后将每个值插入到新行中。

T-SQL 现在有一个函数,使这种类型的操作变得轻而易举。此功能在 SQL Server 2016 中首次提供,在兼容级别为 130 或更高的数据库(如何检查数据库兼容性级别以及如何更改它)上可用。STRING_SPLIT()

示例

假设我们有以下逗号分隔的列表:

Cat,Dog,Rabbit

我们可以使用 STRING_SPLIT() 函数将每个值拆分到独立的行中,示例如下:

SELECT value FROM STRING_SPLIT(‘Cat,Dog,Rabbit’, ‘,’);

输出:

value 
------
Cat   
Dog   
Rabbit

所以我们已经走到了一半。实际上,根据您的要求,这可能就是您所需要的。

将值插入到表中

我们可以获取上面的代码并将其与语句一起使用。换句话说,我们可以将这些值插入到表中,每个列表项将驻留在其自己的行中。为此,我们可以简单地在前面的代码前面加上一个语句。INSERT()``INSERT()

例:

INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT(‘Cat,Dog,Rabbit’, ‘,’);

这会将每个值插入到表列中其自己的行中。AnimalName``Animals

检查结果

若要检查结果,请对表运行语句:SELECT

SELECT * FROM Animals;

输出:

AnimalId  AnimalName
--------  ----------
1         Cat       
2         Dog       
3         Rabbit    

此结果假定该列是一列(每个新行都会自动插入递增的值)。AnimalId``IDENTITY

完整剧本

这是一个脚本,允许您一次性完成上述示例。它创建数据库,创建表,插入数据,然后检查结果。

创建数据库:

/* Create database */ USE master; CREATE DATABASE Nature;

完成其余的工作:

/* Create table */ USE Nature; CREATE TABLE Animals ( AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY, AnimalName nvarchar(255) NOT NULL );

/* Insert data from the list */ INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT(‘Cat,Dog,Rabbit’, ‘,’);

/* Check the result */ SELECT * FROM Animals;