各位大虾:
请教一个问题:能不能一次性向存储过程传递多行数据,以实现在该存储过程内插入或者更新多行数据?该存储过程应该怎么写呢?谢谢。 例如:有表如下 SP_ID SP_NAME
----------+-------------
01 + 康师傅方便面
现在我想在vb.NET 程序中一次性插入N行数据,应该如何写存储过程以及在VB.NET中如何调用并传递数据。
请教一个问题:能不能一次性向存储过程传递多行数据,以实现在该存储过程内插入或者更新多行数据?该存储过程应该怎么写呢?谢谢。 例如:有表如下 SP_ID SP_NAME
----------+-------------
01 + 康师傅方便面
现在我想在vb.NET 程序中一次性插入N行数据,应该如何写存储过程以及在VB.NET中如何调用并传递数据。
create table tb(col varchar(20))
go
declare @str varchar(8000)
set @str='国家地理,美国国家地理,华夏地理,中国国家地理,旅游,摄影'set @str='insert into tb select * from (select col = ''' + replace(@str , ',' , ''' union all select ''')
set @str = @str + ''')t'exec(@str)select * from tbdrop table tb/*
col
--------------------
国家地理
美国国家地理
华夏地理
中国国家地理
旅游
摄影(所影响的行数为 6 行)
*/
"~"代表一条记录,"&"代表字段值
有多少个不确定,就是说不一定就是两条
就是拆分后插入到表中
拆分后
insert into SYS_User_Role ( ROLE_ID,DEPARTMENT_ID ) values ( 1,30 )
insert into SYS_User_Role ( ROLE_ID,DEPARTMENT_ID ) values ( 10353,32 )
create table SYS_User_Role(ROLE_ID int,DEPARTMENT_ID int)
gocreate procedure sp_test(@str varchar(8000))
as
begin
declare @n_str varchar(50)
while charindex('~',@str)>0
begin
set @n_str=replace(left(@str,charindex('~',@str)-1),'&',',')
set @str=stuff(@str,1,charindex('~',@str),'')
exec('insert into SYS_User_Role(ROLE_ID,DEPARTMENT_ID) values('+@n_str+')')
end
end
goexec sp_test '1&30~10353&32~'
goselect * from SYS_User_Role
/*
ROLE_ID DEPARTMENT_ID
----------- -------------
1 30
10353 32
*/
godrop procedure sp_test
drop table SYS_User_Role
go