sql server 存储过程 数据不能完整插入

要求用户输入两段用分号分隔的字符串,如'01;02;03'和'aa;bb;cc';传到存储过程中,存储过程将01和aa存到student表的xh和xm字段,02和bb,03和cc;但是存储过程的语句肯定有问题,就是不能存入,望解:

create Proc insert_Data
@str_xh varchar(100),
@str_xm varchar(500)
as
while(charindex(';',@str_xh)<>0 and charindex(';',@str_xm)<>0)
begin

declare @xh_id varchar(10),
        @xm_id varchar(50);
set @xh_id=substring(@str_xh,1,charindex(';',@str_xh)-1);
set @xm_id=substring(@str_xm,1,charindex(';',@str_xm)-1);

insert into student values(@xh_id,@xm_id) ;

--截取剩余的字符串重新赋给@xh_id
set @str_xh=stuff(@str_xh,1,charindex(';',@xh_id),'');
set @str_xm=stuff(@str_xm,1,charindex(';',@xm_id),'')

end

--字符串中没有';'了,则最后一个id直接为最后一个字符
insert into student values(@xh_id,@xm_id)
go

阅读 3k
1 个回答

我觉得你这样定义参数,处理比较复杂,如果两个参数对应的值是一一对应,可以合并为一个参数
你可以采取xml格式的参数,如:
下面的@xml就是你的参数,在处理时可以直接按表处理


DECLARE @xml XML 
SET @xml='<students>
          <student><code>01</code><name>aa</name></student>
          <student><code>02</code><name>bb</name></student>
          <student><code>03</code><name>cc</name></student>
</students>'

SELECT b.value('code[1]','varchar(100)') AS code, b.value('name[1]','varchar(100)') AS [name]
FROM @xml.nodes('students/student') s(b)

code name
01 aa
02 bb
03 cc

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进