DECLARE @SAMP TABLE
(
COMMASEPA VARCHAR(255),
X VARCHAR(10),
Y VARCHAR(10),
Z VARCHAR(10),
A VARCHAR(10),
B VARCHAR(10),
C VARCHAR(10),
D VARCHAR(10)
)
INSERT INTO @SAMP VALUES
('X=1,Y=2,Z=3',null,null,null,null,null,null,null),
('X=3,Y=4,Z=5,A=6',null,null,null,null,null,null,null),
('X=1,Y=2,Z=3,A=5,B=6,C=7,D=8',null,null,null,null,null,null,null)
update S set
X = case when P.X > 3 then substring(T.COMMASEPA, P.X, charindex(',', T.COMMASEPA, P.X) - P.X) end,
Y = case when P.Y > 3 then substring(T.COMMASEPA, P.Y, charindex(',', T.COMMASEPA, P.Y) - P.Y) end,
Z = case when P.C > 3 then substring(T.COMMASEPA, P.Z, charindex(',', T.COMMASEPA, P.Z) - P.Z) end,
A = case when P.A > 3 then substring(T.COMMASEPA, P.A, charindex(',', T.COMMASEPA, P.A) - P.A) end,
B = case when P.B > 3 then substring(T.COMMASEPA, P.B, charindex(',', T.COMMASEPA, P.B) - P.B) end,
C = case when P.C > 3 then substring(T.COMMASEPA, P.C, charindex(',', T.COMMASEPA, P.C) - P.C) end,
D = case when P.D > 3 then substring(T.COMMASEPA, P.D, charindex(',', T.COMMASEPA, P.D) - P.D) end
from @SAMP as S
cross apply (select ','+S.COMMASEPA+',') as T(COMMASEPA)
cross apply (select charindex(',X=', T.COMMASEPA)+3 as X,
charindex(',Y=', T.COMMASEPA)+3 as Y,
charindex(',Z=', T.COMMASEPA)+3 as Z,
charindex(',A=', T.COMMASEPA)+3 as A,
charindex(',B=', T.COMMASEPA)+3 as B,
charindex(',C=', T.COMMASEPA)+3 as C,
charindex(',D=', T.COMMASEPA)+3 as D) as P
我一次有同樣的問題。你可以到這裏http://www.sommarskog.se/arrays-in-sql-2008.html或http://www.apexa.net/Blog/web_design_Blog_20080619.aspx。這兩個頁面都向您展示了將表格/數組解析/解析到表格中的方法 – Patriotec 2012-03-06 18:24:53