SQL Sever怎样同时插入N条数据而不在程序里控制

问:“怎样同时插入N条数据,却不在程序里控制?”

答:“由于SQL Sever不支持数组参数.所以只能用另类的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"1,2,3,4,5,6"。

然后在存储过程中用SubString配合CharIndex把分割开来。

详细的存储过程:

CREATE PROCEDURE dbo.ProductListUpdateSpecialList
@ProductId_Array varChar(800),
@ModuleId int
AS
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TId int
Set @PointerPrev=1
set @PointerCurr=1
begin transaction
Set NoCount ON
delete from ProductListSpecial where ModuleId=@ModuleId
Set @PointerCurr=CharIndex
',',@ProductId_Array,@PointerPrev+1)
set @TId=cast(SUBSTRING(@ProductId_Array,@PointerPrev,
@PointerCurr-@PointerPrev) as int)
Insert into ProductListSpecial
(ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
while (@PointerPrev+1 < LEN(@ProductId_Array))
Begin
Set @PointerCurr=CharIndex
(',',@ProductId_Array,@PointerPrev+1)
if(@PointerCurr>0)
Begin
set @TId=cast(SUBSTRING
(@ProductId_Array,@PointerPrev+1,
@PointerCurr-@PointerPrev-1) as int)
Insert into ProductListSpecial
(ModuleId,ProductId) Values(@ModuleId,@TId)
SET @PointerPrev = @PointerCurr
End
else
Break
End
set @TId=cast(SUBSTRING
(@ProductId_Array,@PointerPrev+1,
LEN(@ProductId_Array)-@PointerPrev) as int)
Insert into ProductListSpecial
(ModuleId,ProductId) Values(@ModuleId,@TId)
Set NoCount OFF
if @@error=0
begin
commit transaction
end
else
begin
rollback transaction
end
GO

时间: 2024-12-30 22:00:18

SQL Sever怎样同时插入N条数据而不在程序里控制的相关文章

用Sql server一次插入多条数据

可以将多条数据组成一棵XML树 将XML树作为varchar参数传入 用 insert xx select xxx from openxml() 的语法插入数据 一个小例子: declare @ssss as nvarchar(2000) ;set @ssss = N'' ;declare @idHandle as int ;EXEC sp_xml_preparedocument @idHandle OUTPUT, @ssssinsert into tbl(Name,Intro)select *

sql2000 执行sql语句插入一条数据完整语句怎么写

问题描述 我想写一个聊天室机器人,定时自动执行sql语句向数据库Room_List表插入一条数据.按这个插入语句:insertinto表名(字段1,字段2)values('内容1','内容2')进行插入INSERTINTO[Room_List](UserID,Sid,UserNick,Text,AddTime)VALUES("76368","0","测试会员","我是新手,请多关照","2016-6-523:59:3

java jdbc-向mysql中插入50000条数据怎么那么慢。。。

问题描述 向mysql中插入50000条数据怎么那么慢... package cn.itcast.bath; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Test; import cn.itcast.jdbc.JDBCUtils; public class Bath { @Test public void demo1() { Connection conn=null; Prepar

JdbcTemplate插入一条数据到Oracle数据库并返回自增长ID

问题描述 我的需求就是需要循环插入一组数据,因为数据库是按照自增长ID关联的,所以每插入一条数据,都要返回自增长的ID,用来设置关联关系,我用JdbcTemplate可以实现一组数据的插入并返回ID,但是循环两次以上就出错了:org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;uncategorizedSQLExceptionforSQL[insertintoT_METADATA_ABSTRAC

oracle-怎么插入多条数据。各路大神!

问题描述 怎么插入多条数据.各路大神! 像发邮件那样,多个用户名,用:隔开,存同一条信息.怎么插入到数据库中啊!各路大神. 解决方案 1.如果你用程序往里存的话,比较简单,将这些用户按照";"截取,然后批量存入数据库,或者单条循环存入数据库. 2.如果直接写sql语句往数据库存的话,可以借助一下notePad软件功能: 1)在在文本上写一条插入语句,如:insert into table(userName, content, createTime) values('', '测试', '

string-关于数据库中插入多条数据,其中有一项关于to_date的问题

问题描述 关于数据库中插入多条数据,其中有一项关于to_date的问题 String sql = "insert into TestInfo(tiName, to_date('tiStartTime','YYYY-MM-DD' ),tiState,TiGrade) values(?,?,?,?)"; 这句数据库语句关于to_date的地方有哪里不对?为什么会报错说缺失逗号 解决方案 to_date('tiStartTime','YYYY-MM-DD' ) 这个位置应该是一个字段名称,怎

一个关于插入一条数据如何拿该条数据主键的问题

问题描述 一个关于插入一条数据如何拿该条数据主键的问题 String action=request.getParameter("action"); if(action !=null && action.trim().equals("post")){ String title=request.getParameter("title"); System.out.println(title); String cont=request.g

用一条mysql语句插入多条数据_Mysql

       假如有一个数据表A: id name title addtime         如果需要插入n条数据 : $time= time(); $data = array( array( 'name'=>'name1','title'=>'title1','addtime'=>$time; ), array( 'name'=>'name2','title'=>'title2','addtime'=>$time; ), array( 'name'=>'nam

数据库-如何实现一个触发器:在插入一条数据前创建一个表,表名由插入的数据决定?

问题描述 如何实现一个触发器:在插入一条数据前创建一个表,表名由插入的数据决定? MySQL数据库的触发器能不能实现创建表,表名用变量指定? 这个变量该如何表示? 谢谢. 解决方案 可以的,使用动态sql就可以,参考如下链接 http://www.2cto.com/database/201209/156678.html