Sql server 将单行值拆分为多列的sql查询
我正在处理sql serevr 2010中的现有审核表。 每行中都有以下字符串:Sql server 将单行值拆分为多列的sql查询,sql-server,Sql Server,我正在处理sql serevr 2010中的现有审核表。 每行中都有以下字符串: "UserID: 4| GroupID: 1| GroupParentID: 1| GroupType: 1| RevisedBy: 4|" 从一排开始。 我的计划是创建以下格式的表: IDName IDs -------- ---------- UserID 4 GroupID 1 GroupParentID 1 GroupType 1
"UserID: 4| GroupID: 1| GroupParentID: 1| GroupType: 1| RevisedBy: 4|"
从一排开始。
我的计划是创建以下格式的表:
IDName IDs
-------- ----------
UserID 4
GroupID 1
GroupParentID 1
GroupType 1
RevisedBy 4
最后,我创建了如下内容:(使用主表引用ID)
希望这是有意义的。
请让我知道如何以高性能实现这一点,因为该表有一百万行
谢谢
我使用拆分函数来分隔管道“|”
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
我正在寻找分割的方法 使用上面已有的表值函数,您可能可以编写如下查询:
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;
你能发布你尝试过的东西吗?我已经编辑了我的帖子。请看一看。
UserID: 4
GroupID: 1
GroupParentID: 1
GroupType: 1
RevisedBy: 4
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;