Sql server 拆分逗号分隔的字符串并插入到表中(int)

Sql server 拆分逗号分隔的字符串并插入到表中(int),sql-server,Sql Server,我有一个有3列的表(First\u ID,Second\u ID,Third\u ID)所有列都是int列 现在我有3个值,第一个和第三个值是int值(1和0),第二个值是逗号分隔的字符串('188189190191192194') 我应该采用什么方法来填充表格,如下所示: 1 188 0 1 189 0 1 190 0 1 191 0 1 192 0 1 193 0 1 194 0 我尝试过不同的方法,但无法让它按我所希望的方式工作 提前感谢使用您在评论中提到的功

我有一个有3列的表(
First\u ID,Second\u ID,Third\u ID
)所有列都是int列

现在我有3个值,第一个和第三个值是int值(1和0),第二个值是逗号分隔的字符串(
'188189190191192194'

我应该采用什么方法来填充表格,如下所示:

1   188 0
1   189 0
1   190 0
1   191 0
1   192 0
1   193 0
1   194 0
我尝试过不同的方法,但无法让它按我所希望的方式工作

提前感谢使用您在评论中提到的功能

-- Variable holding comma separated values
DECLARE @Var VARCHAR(4000);
SET @Var =  '188,189,190,191,192,193,194'

-- Test Target Table
DECLARE @Target_Table TABLE  (First_ID INT,Second_ID INT,Third_ID INT) 

-- Insert statement
INSERT INTO @Target_Table
SELECT 1, CAST(Items AS INT) , 0 
FROM  dbo.Split(@Var, ',')  

-- Test Select
SELECT * FROM  @Target_Table  
结果集

╔══════════╦═══════════╦══════════╗
║ First_ID ║ Second_ID ║ Third_ID ║
╠══════════╬═══════════╬══════════╣
║        1 ║       188 ║        0 ║
║        1 ║       189 ║        0 ║
║        1 ║       190 ║        0 ║
║        1 ║       191 ║        0 ║
║        1 ║       192 ║        0 ║
║        1 ║       193 ║        0 ║
║        1 ║       194 ║        0 ║
╚══════════╩═══════════╩══════════╝  

最好使用XML来实现这一点

Declare @Var nvarchar(MAX)

Set @Var ='188,189,190,191,192,193,194'

DECLARE @XML AS XML

DECLARE @Delimiter AS CHAR(1) =','

SET @XML = CAST(('<X>'+REPLACE(@Var,@Delimiter ,'</X><X>')+'</X>') AS XML)

DECLARE @temp TABLE (ID INT)

INSERT INTO @temp

SELECT N.value('.', 'INT') AS ID FROM @XML.nodes('X') AS T(N)

SELECT * FROM @temp
Declare@Var nvarchar(最大值)
设置@Var='188189190191192194'
将@XML声明为XML
将@Delimiter声明为CHAR(1)=','
将@XML=CAST(“”+REPLACE(@Var,@Delimiter,)+“”)设置为XML)
声明@temp表(ID INT)
插入到@temp中
从@XML.nodes('X')中选择N.value('.','INT')作为ID,从@XML.nodes('X')中选择T(N)
从@temp中选择*

从SQL server 2016起,您可以使用此功能
字符串\u拆分

DECLARE @Var VARCHAR(4000);
SET @Var =  '188,189,190,191,192,193,194'

SELECT 1 as First_ID, value as Second_ID ,0 as Third_ID FROM string_split(@Var,',')

用于sql server的google
split()
函数。可能与的重复我为我的无知道歉。我用谷歌搜索了一下,我使用了一个拆分函数,但是我在填充表格时遇到了困难。我使用这个函数时,表格中的值列表在哪里?拆分在SQL Server中不是一个函数。使用SQL Server 2012。我是否需要做任何特殊的事情没有SQL Server函数split()给那些(正确地)评论SQL Server不包含split()函数的人;这个答案建议OP创建一个dbo.split函数,如链接到的问题所示。这个答案向OP展示了如何使用在另一个问题中创建的split函数来处理稍微复杂的情况。对于SQL Server 2012或更高版本,可以使用“dbo.SplitString()”。工作原理与split()函数类似。:)XLM不是比VARCHAR慢吗?抱歉耽搁了。由于XML验证,XML类型的存储速度可能会稍慢。无需创建数据库函数即可完美工作,非常适合一次性任务
DECLARE @Table VARCHAR(100)='AAA,BBB,CCC,DDD'
IF OBJECT_ID('[Comma_Split]') IS NOT NULL
DROP TABLE [Comma_Split]
CREATE TABLE [Comma_Split](ID INT IDENTITY(1,1),COL VARCHAR(100))
while LEN(@Table)>0
BEGIN
DECLARE @COMMA INT= CHARINDEX(',', @Table)
IF @COMMA=0 SET @COMMA=LEN(@Table)+1
INSERT INTO [Comma_Split]
SELECT SUBSTRING(@Table,1,@COMMA-1)
SET @COMMA=@COMMA+1
SET @Table=SUBSTRING(@Table,@COMMA,LEN(@Table))
END