各位大虾:
      请教一个问题:能不能一次性向存储过程传递多行数据,以实现在该存储过程内插入或者更新多行数据?该存储过程应该怎么写呢?谢谢。      例如:有表如下        SP_ID        SP_NAME
       ----------+-------------
       01        +  康师傅方便面
       现在我想在vb.NET 程序中一次性插入N行数据,应该如何写存储过程以及在VB.NET中如何调用并传递数据。     

解决方案 »

  1.   

    你参考这个:--分解字符串并将数据插入表中。
    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 行)
    */
      

  2.   

    利用遊標吧,或者在VB.NET中用循環.
      

  3.   

    这样不行吗?建个中间表或全局临时表,vb.NET 程序中一次性插入N行数据,然后在存储过程里再处理。
      

  4.   

    例如这样,用函数或存储过程均可.例如这样一个字符串1&30~10353&32~
    "~"代表一条记录,"&"代表字段值
    有多少个不确定,就是说不一定就是两条
    就是拆分后插入到表中
    拆分后
    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
      

  5.   

    谢谢dawugui的答案,你的答案是可行的,只是在数据量比较大的情况下就不适用了,在处理小批量数据的时候我会采用你的方法。