首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问怎么将字符串分割保存为多条记录 和将结果集转换为字符串返回

2012-02-25 
请教如何将字符串分割保存为多条记录 和将结果集转换为字符串返回有数据表 T1,其中有字段 c1 和 u1假设表

请教如何将字符串分割保存为多条记录 和将结果集转换为字符串返回
有数据表 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

合并结贴


[解决办法]

SQL code
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) 

热点排行