求一条 sql 分割 数组 语句

wwfgu00ing 2012-11-14 09:18:51
有多条记录,每条记录用!连接
单个记录多个字段的值用,连接
比如
declare @para='王二,男!李四,女'
先根据这个参数
拼接成 insert into tab (name,sex) (王二,男)
insert into tab (name,sex) (李四,女)
...全文
188 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqlkxr 2012-11-17
  • 打赏
  • 举报
回复
declare @para nvarchar(100) declare @t table (tname varchar(20),tsex varchar(10)) set @para='王二,男!李四,女!李连杰,男' while patindex('%!%',@para)>0 begin declare @all nvarchar(20) set @all=substring(@para,1,patindex('%!%',@para)-1) insert into @t select substring(@all,1,charindex(',',@all)-1),substring(@all,charindex(',',@all)+1,100) set @para=substring(@para,patindex('%!%',@para)+1,200) if patindex('%!%',@para)=0 insert into @t select substring(@para,1,charindex(',',@para)-1),substring(@para,charindex(',',@para)+1,200) end select * from @t
开启时代 2012-11-14
  • 打赏
  • 举报
回复
declare @para varchar(200)='王二,男!李四,女' set @para='insert into tab(name,sex) values('''+replace(replace(@para,',',''','''),'!','''),(''')+''')' exec(@para) select * from tab
發糞塗牆 2012-11-14
  • 打赏
  • 举报
回复
晕,贴错了
use tempdb
 go
 if OBJECT_ID('Tempdb..#tab') is not null
  drop table #tab
 create TABLE #tab(name varchar(4),sex varchar(2))
 go
  declare @para nvarchar(4000);declare @sql nvarchar(4000);
 set @para=N'王二,男!李四,女';
 set @para=REPLACE(@para,',',''',''')
 set @sql='insert into #tab (name,sex) select '''+replace(@para,'!',''' union all select ''')+''''
 exec(@sql)
 select 'insert into tab(name,sex) values('+''''+name+''''+','+''''+sex+'''' +') '
 from #tab
 
 /*
 
 
 ----------------------------------------------
 insert into tab(name,sex) values('王二','男') 
 insert into tab(name,sex) values('李四','女') 
 
 (2 行受影响)
 
 
 */
發糞塗牆 2012-11-14
  • 打赏
  • 举报
回复
use tempdb
 go
 if OBJECT_ID('Tempdb..#tab') is not null
  drop table #tab
 create TABLE #tab(name varchar(4),sex varchar(2))
 go
  declare @para nvarchar(4000);declare @sql nvarchar(4000);
 set @para=N'王二,男!李四,女';
 set @para=REPLACE(@para,',',''',''')
 set @sql='insert into #tab (name,sex) select '''+replace(@para,'!',''' union all select ''')+''''
 exec(@sql)
 select 'insert into tab(name,sex) values('+''''+name+''''+','+''''+sex+'''' +') '
 from #tab
 
 /*
 
 (2 行受影响)
 
 ------------------------------------------
 insert into tab(name,sex) values(王二,男) 
 insert into tab(name,sex) values(李四,女) 
 
 (2 行受影响)
 
 */
發糞塗牆 2012-11-14
  • 打赏
  • 举报
回复
楼主想要这个吧?
use tempdb
 go
 if OBJECT_ID('Tempdb..#tab') is not null
  drop table #tab
 create TABLE #tab(name varchar(4),sex varchar(2))
 go
  declare @para nvarchar(4000);declare @sql nvarchar(4000);
 set @para=N'王二,男!李四,女';
 set @para=REPLACE(@para,',',''',''')
 set @sql='insert into #tab (name,sex) select '''+replace(@para,'!',''' union all select ''')+''''
 exec(@sql)
 select 'insert into tab(name,sex) values('+name+','+sex +') '
 from #tab
 
 /*
 
 (2 行受影响)
 
 ------------------------------------------
 insert into tab(name,sex) values(王二,男) 
 insert into tab(name,sex) values(李四,女) 
 
 (2 行受影响)
 
 */
还在加载中灬 2012-11-14
  • 打赏
  • 举报
回复
use tempdb
go
if OBJECT_ID('Tempdb..#tab') is not null
 drop table #tab
create TABLE #tab(name varchar(4),sex varchar(2))
go
 declare @para nvarchar(4000);declare @sql nvarchar(4000);
set @para=N'王二,男!李四,女';
set @para=REPLACE(@para,',',''',''')
set @sql='insert into #tab (name,sex) select '''+replace(@para,'!',''' union all select ''')+''''
exec(@sql)
select * from #tab
前段时间在写一个服务端程序的时候,  需要用到mysql. 客户端连接服务端执行sql分好几种情况, { 查询SQL, 执行SQL, 执行SQL事务, 批量执行支持, 查询执行混合 } ... 其中的"批量执行"就有点让我头疼, 玩过sql的都知道, 批量执行一般以";" 终结符算一条sql语句, 以此分割. 难点就是把批量的sql语句, 分割为单条, 一个一个的执行.    估计有的易友可能想到了"分割文本, 发送文本数组" 首先"发送文本数组", 我不喜欢,  有时候显得麻烦. 其次"分割文本", 你可能会遇到这样以下这样的情况, 也就是sql字符串中出现了";", 你能怎么办? 你也很绝望对吧? 复制代码 [font=微软雅黑]INSERT INTO `User`(name) values('剑''齿;虎');  SELECT LAST_INSERT_ID();[/font] 以上问题还有, 字符串中包含单引号就需要用两个单引号表示.... 实在不想屈服于前面两种蛋疼的方式,  试着自己封装子程序解析, 忽略字符串什么的.   有时候脑子是个好东西,  可惜我好像没有似的...   感觉设计起来还挺复杂麻烦的,  我没学过什么脚本设计,  编译设计的. 于是前段时间论坛有几个帖子被顶起来了,  一个叫"无间酱"的大佬制作了好几个练手的脚本语言设计, 我灵机一动...  脚本也会遇到这样的问题,   就把源码中的解析终结符部分给抠出来了...  总算说到重点了. 刚开始还不能直接用,   改了改还算可以了. 示例 复制代码 INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');--注释A:插入语句-- SELECT * FROM User; /*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1 结果: 数组:3{ “INSERT INTO User (name,pwd) values('剑齿虎;哇', 'aabb');”, “--注释A:插入语句-- SELECT * FROM User;”, “/*注释B:查询*/ UPDATE User SET pwd='ac''c' WHERE uid=1” }

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧