加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2016-09-03 20:54:28 所属栏目:MsSql教程 来源:站长网
导读:问:怎样同时插入N条数据,却不在程序里控制? 答:由于SQL Sever不支持数组参数.所以只能用另类的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似1
问:“怎样同时插入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

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读