在sql中拆分逗号分隔字符串

在sql中拆分逗号分隔字符串,sql,sql-server,split,Sql,Sql Server,Split,管理器主表 和用户表 我希望使用主表使用逗号分隔的管理器名称 我想要这份表格的结果 我的问题是这样的 declare @ststring varchar(max)= select manager from customer CREATE TABLE #tblUserCustomer ( inCustomerID iNT) Insert into #tblUserCustomer select stvalue from dbo.getlistfrmcommaseprated_int

管理器主表

和用户表

我希望使用主表使用逗号分隔的管理器名称

我想要这份表格的结果

我的问题是这样的

declare @ststring varchar(max)= select manager
 from customer

    CREATE TABLE #tblUserCustomer  ( inCustomerID iNT)

Insert into #tblUserCustomer
select stvalue from dbo.getlistfrmcommaseprated_int('1,2,4')
declare @stcscont varchar(1000)
select @stcscont = (select Um.Name + ',' from master um
                    join #tblUserCustomer T on t.inCustomerID = um.inuserid
                    FOR XML PATH('')
                    )
print @stcscont
drop table #tblUserCustomer
对于单个数据,此查询可以是完整的帮助
但是我有多行

我没有你的解析函数,所以我用了我的。[dbo].[udf Str Parse]返回RETVAL

一些样本数据

实际查询

返回

编辑-添加了我的解析函数


我想要用户表中给出的与管理器名称相关的管理器id。您好,它给出的错误是无效的对象名称“dbo.udf Str Parse”。@radhasingh阅读了我答案的第一行,很高兴提供我的解析函数。只是假设你不想要two@radhasingh添加了我的解析函数
Declare @Manager table (ID int,Name varchar(25))
Insert Into @Manager values
(1,'Ajay'),
(2,'Sarita'),
(3,'Akash'),
(4,'Niti')

Declare @User table (ID int,Name varchar(25),Manager varchar(25))
Insert Into @User values
(1,'Javed','1,3'),
(2,'Ruma' ,'1,4')
Select A.*
      ,ManagerName = B.String
 From  @User A
 Cross Apply (
                Select String = Stuff((Select ',' +Name 
                  From (
                        Select M.Name,ML.RetSeq
                         From  @Manager M
                         Join  [dbo].[udf-Str-Parse](A.Manager,',') ML
                           on  M.ID=ML.RetVal
                       ) X
                  Order By RetSeq
                  For XML Path ('')),1,1,'') 
              ) B
ID  Name    Manager   ManagerName
1   Javed   1,3       Ajay,Akash
2   Ruma    1,4       Ajay,Niti
CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From  (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X
    Cross Apply x.nodes('x') AS B(i)
);
--Thanks Shnugo for making this XML safe
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--Select * from [dbo].[udf-Str-Parse]('this,is,<test>,for,< & >',',')
--Performance On a 5,000 random sample -8K 77.8ms, -1M 79ms (+1.16), -- 91.66ms (+13.8)