Sql server 如何在sql server中将逗号分隔的值转换为行

Sql server 如何在sql server中将逗号分隔的值转换为行,sql-server,sql-server-2008,sql-server-2016,Sql Server,Sql Server 2008,Sql Server 2016,如何将逗号分隔的值转换为: 表格 User Name Unit ABC 2,3 对下列事项: User Name Unit ABC 2 ABC 3 下面是SQL server中的逻辑,希望对您有所帮助 declare @tab table ([user_name] varchar(10),val varchar(100)) insert into @tab select 'ABC','1,2' SELECT A.[user_name],

如何将逗号分隔的值转换为:

表格

User Name  Unit
ABC        2,3  
对下列事项:

User Name  Unit
ABC        2  
ABC        3

下面是SQL server中的逻辑,希望对您有所帮助

declare @tab table ([user_name] varchar(10),val varchar(100))
insert into @tab
select 'ABC','1,2'

SELECT A.[user_name],  
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT [user_name],  
         CAST ('<M>' + REPLACE(val, ',', '</M><M>') + '</M>' AS XML) AS String  
     FROM  @tab) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 

您可以使用
fn_split
功能。

您已经用SQL Server 2016标记了您的问题,在SQL Server 2016中有一个新功能

在SQL Server 2016中,您的查询应尽可能简单:

declare @tab table ([user_name] varchar(10),Unit varchar(100))
insert into @tab
VALUES ('ABC','1,2')

SELECT t.[user_name]
       , Value as Unit
FROM @tab t 
    CROSS APPLY STRING_SPLIT(t.Unit , ',') 

可能与哪个数据库版本重复?Azure Sql server 2016能否请检查2016内置支持拆分功能请在回答周围添加解释欢迎使用堆栈溢出!请不要添加多个问题。回答最好的一个,并将其余的标记为重复项。欢迎光临!请注意。
declare @tab table ([user_name] varchar(10),Unit varchar(100))
insert into @tab
VALUES ('ABC','1,2')

SELECT t.[user_name]
       , Value as Unit
FROM @tab t 
    CROSS APPLY STRING_SPLIT(t.Unit , ',') 
CREATE FUNCTION dbo.SplitCSVs (@CSVString varchar(1000))

RETURNS @SeparatedValues TABLE (Value VARCHAR(100))
AS
BEGIN
 DECLARE @CommaPosition INT
 WHILE (CHARINDEX(',', @CSVString, 0) > 0)
 BEGIN
  SET @CommaPosition = CHARINDEX(',', @CSVString, 0)
  INSERT INTO @SeparatedValues (Value)
  SELECT SUBSTRING(@CSVString, 0, @CommaPosition)
  SET @CSVString = STUFF(@CSVString, 1, @CommaPosition, '')
 END
  INSERT INTO @SeparatedValues (Value)
  SELECT @CSVString

 RETURN
END

SELECT * FROM dbo.SplitCSVs('aby,123')