All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
安装使用MySQL时一个典型错误的解决_php资料_编程技术
IIS6的PHP最佳配置方法_[PHP教程]
.NET加密原理之方法体加密信息对应关系_.net资料_编程技术
ASP.NET,2.0,中的,Windows,身份验证_.net资料_编程技术
SQL,Server到底需要使用哪些端口_mssql学习_编程技术
PHP汉字区位码相互转换源代码_[PHP教程]
制作“You Are Here”按钮_[Html教程]
在.net中创建使用全球唯一标识符_[Asp.Net教程]
visual c++中虚基类的用法
常规数据库维护涉及的5项工作_[SQL Server教程]
Reading number is top 10 pictures
Nine school beauty star those gossip matters
湖边的风景
The money of more than 100 countries and regions17
NeedWallpaper14
美女挤公交
The goddess of the single reason1
29 the belle stars after bath figure4
The dog buy the ham oneself
Hunan province aizhai super-large suspension bridge open to traffic and 4 world first1
Original author said, this is the Hengyang people
Download software ranking
Unix video tutorial8
Boxer vs Yellow5
Tram sex maniac 2 (H) rar bag9
Eclipse-CALMSANNY (second edition)
linux高级编程
Take off clothes to survival
C++编程教程第三版
The cock of the Grosvenor LTD handsome
Adobe Flash Player(IE) 10.0.32.18 浏览器专用的FLASH插件
JSP+Ajax Web development typical examples
归海一刀 published in(发表于) 2014/2/1 0:12:06 Edit(编辑)
Sql,server传送数组参数的变通办法_[SQL,Server教程]

Sql,server传送数组参数的变通办法_[SQL,Server教程]

Sql server传送数组参数的变通办法_[SQL Server教程]

最近一直在做Dnn模块的开发,过程中碰到这么一个问题,需要同时插入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
  
  网友Bizlogic对此的改进方法:
  
  应该用SQL2000 OpenXML更简单,效率更高,代码更可读:
  
  CREATE Procedure [dbo].[ProductListUpdateSpecialList]
  (
  @ProductId_Array NVARCHAR(2000),
  @ModuleId INT
  )
  
  AS
  
  delete from ProductListSpecial where ModuleId=@ModuleId
  
  -- If empty, return
  IF (@ProductId_Array IS NULL OR LEN(LTRIM(RTRIM(@ProductId_Array))) = 0)
  RETURN
  
  DECLARE @idoc int
  
  EXEC sp_xml_preparedocument @idoc OUTPUT, @ProductId_Array
  
  Insert into ProductListSpecial (ModuleId,ProductId)
  Select
  @ModuleId,C.[ProductId]
  FROM
  OPENXML(@idoc, ’/Products/Product’, 3)
  with (ProductId int ) as C
  where
  C.[ProductId] is not null
  
  EXEC sp_xml_removedocument @idoc

来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.