如何在 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;