sqlserverダイナミックカラム移行
1144 ワード
今日、sqlserver 2012で分析ニーズに遭遇し、動的カラムを転送し、記録します.
また、valueフィールドに&などxmlが特殊文字の文字がある場合は、CONVERT(XML)を使用するとエラーが発生するので、これらの文字を他の文字に置き換えて、最終結果で置き換えることに注意してください.
create table t1 (id int,value varchar(100));
insert into t1 values(1,'a,b,c');
insert into t1 values(2,'a,b,c,d,e');
insert into t1 values(3,'a,b,c,d,e,f,g');
select * from t1;
1 a,b,c
2 a,b,c,d,e
3 a,b,c,d,e,f,g
SELECT a.id,b.[values]
FROM (
SELECT id,[VALUE] = CONVERT(XML , '<v>' + REPLACE(value , ',' , '</v><v>') + '</v>')
FROM t1
) a
OUTER APPLY
( SELECT [values] = N.v.value('.' , 'nvarchar(max)')
FROM a.[value].nodes('/v') N ( v )
) b
1 a
1 b
1 c
2 a
2 b
2 c
2 d
2 e
3 a
3 b
3 c
3 d
3 e
3 f
3 g
また、valueフィールドに&などxmlが特殊文字の文字がある場合は、CONVERT(XML)を使用するとエラーが発生するので、これらの文字を他の文字に置き換えて、最終結果で置き換えることに注意してください.