sqlserver怎么把一个表中按分号隔开的字符串分成多行放在一个临时表中呢?

2025-03-16 08:40:49
推荐回答(1个)
回答1:

  1. 分割“版区负责人Id”,使其结果为

    版区Id    版区负责人Id

    6            123

    6            456

    6            789

    (这里,我想来想去,只有使用零时表+游标来实现,个人没有想到更好的方法)


    CREATE FUNCTION [dbo].[fun_Split]
    (
      @str VARCHAR(MAX) ,
      @split VARCHAR(10)
    )
    RETURNS TABLE
    AS 
    RETURN
    (SELECT B.id FROM      ( SELECT    [value] = CONVERT(XML , '' + REPLACE(@str , @split , '')
                                + '
    ')
                    ) A
          OUTER APPLY ( SELECT  id = N.v.value('.' , 'varchar(100)')
                        FROM    A.[value].nodes('/v') N ( v )
                      ) B
        )
    GO
    --2005以及以上的版本支持这种分割写法。
  2. 用xml path,把数据搞成你所要的结果