sql查询将单个行拆分为多个列

时间:2015-08-31 17:19:43

标签: sql-server

我正在使用sql serevr 2010中的现有审计表。 我在每一行都有以下字符串:

Accept client certificates

从一排。 我的计划是创建一个以下格式的表格:

"UserID: 4| GroupID: 1| GroupParentID: 1| GroupType: 1| RevisedBy: 4|"

最后我创建了这样的东西:(用主表引用ID)

IDName        IDs
--------      ----------
UserID          4
GroupID         1
GroupParentID   1
GroupType       1
RevisedBy       4

希望这是有道理的。 请告诉我如何以高性能实现这一目标,因为该表有数百万行。

谢谢

我使用拆分功能来分隔管道' |'。

IDName        IDs
--------      ----------
UserID          User1
GroupID         Gp1
GroupParentID   GG
GroupType       type1
RevisedBy       User1

但是我正在获得一个包含单列的表,

CREATE FUNCTION dbo.SplitStrings_XML1
(
   @List       NVARCHAR(MAX),
   @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN 
 (  
  SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
  FROM 
  ( 
    SELECT x = CONVERT(XML, '<i>' 
      + REPLACE(@List, @Delimiter, '</i><i>') 
      + '</i>').query('.')
  ) AS a CROSS APPLY x.nodes('i') AS y(i)

);
GO

我正在寻找分裂的方法。

1 个答案:

答案 0 :(得分:0)

使用上面的现有表值函数,您可能会编写如下的查询:

INSERT INTO mytable (idname,ids)
SELECT substring(item, 1, charindex(':', item) - 1) AS idname
    ,right(item, Len(item) - charindex(':', item) - 1) AS ids
FROM (
    SELECT cf.*
    FROM test t
    CROSS APPLY dbo.SplitStrings_XML1(t.idname, '|') cf
    WHERE item IS NOT NULL
    ) t1;

SELECT *
FROM mytable;

SQL Fiddle Demo