请教如何将字符串分割保存为多条记录 和将结果集转换为字符串返回
有数据表 T1,其中有字段 c1 和 u1
假设表中原来有数据为
c1 u1
1 2
1 3
2 2
1 5
第一个问题:检索,如果检索c1 = 1 的那么得到
c1 u1
1 2
1 3
1 5
但希望返回的结果不是这种结果集,而是由 u1 的值组成的中间用逗号分割的字符串,结果返回为:“2,3,5”
第二个问题是:插入新数据集
通过传入 u1 对应的字符串和某个 c1 的值同时插入多条,且能够避免重复
比如传入参数 c1 = 1 ,u1对应的字符串为 “2,3,7,9”
那么时间插入数据位两条:
c1 u1
1 7
1 9
因为数据
c1 u1
1 2
1 3
表中原来已经存在,不能重复添加
希望用动态sql 语句,不用存储过程和方法
谢谢
本帖将和
http://topic.csdn.net/u/20111228/21/f518561d-26ac-46e3-9a8a-df35488e9985.html?seed=85076579&r=77110821#r_77110821
合并结贴
[解决办法]
create table t1(c1 int, u1 int)insert into t1select 1, 2 union allselect 1, 3 union allselect 2, 2 union allselect 1, 5-- 第一个问题:检索select t.c1,left(cast((select cast(u1 as varchar(1))+',' from t1 where c1=t.c1 for xml path('')) as varchar(10)),len(cast((select cast(u1 as varchar(1))+',' from t1 where c1=t.c1 for xml path('')) as varchar(10)))-1) u1from t1 twhere t.c1=1group by t.c1c1 u1----------- ----------1 2,3,5(1 row(s) affected)-- 第二个问题是:插入新数据集declare @c int,@u varchar(10)-- 传入的参数select @c=1,@u='2,3,7,9'insert into t1select t2.* from (select a.c0,substring(a.u0,b.number,charindex(',',a.u0+',',b.number)-b.number) u0from (select @c c0,@u u0) ainner join master.dbo.spt_values bon b.[type]='p'and substring(','+a.u0,b.number,1) = ',') t2left join t1 on t2.c0=t1.c1 and t2.u0=t1.u1where t1.u1 is null select * from t1 where c1=1c1 u1----------- -----------1 21 31 51 71 9(5 row(s) affected)