我正在使用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
我正在寻找分裂的方法。
答案 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;