知识大全 给SQL Server传送数组参数的变通办法

Posted

篇首语:这个世界看你笑话的人永远比在乎你的人要多。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 给SQL Server传送数组参数的变通办法相关的知识,希望对你有一定的参考价值。

给SQL Server传送数组参数的变通办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  最近一直在做Dnn模块的开发 过程中碰到这么一个问题 需要同时插入N条数据 不想在程序里控制 但是SQL Sever又不支持数组参数 所以只能用变通的办法了 利用SQL Server强大的字符串处理传把数组格式化为类似     然后在存储过程中用SubString配合CharIndex把分割开来     详细的存储过程    CREATE PROCEDURE dbo ProductListUpdateSpecialList  @ProductId_Array varChar( )   @ModuleId int  AS  DECLARE @PointerPrev int  DECLARE @PointerCurr int  DECLARE @TId int  Set @PointerPrev=   set @PointerCurr=     begin transaction  Set NoCount ON  delete from ProductListSpecial where ModuleId=@ModuleId    Set @PointerCurr=CharIndex( @ProductId_Array @PointerPrev+ )  set @TId=cast(SUBSTRING(@ProductId_Array @PointerPrev @PointerCurr @PointerPrev) as int)  Insert into ProductListSpecial (ModuleId ProductId) Values(@ModuleId @TId)  SET @PointerPrev = @PointerCurr  while (@PointerPrev+ < LEN(@ProductId_Array))  Begin  Set @PointerCurr=CharIndex( @ProductId_Array @PointerPrev+ )  if(@PointerCurr> )  Begin  set @TId=cast(SUBSTRING(@ProductId_Array @PointerPrev+ @PointerCurr @PointerPrev ) as int)  Insert into ProductListSpecial (ModuleId ProductId) Values(@ModuleId @TId)  SET @PointerPrev = @PointerCurr  End  else  Break  End    set @TId=cast(SUBSTRING(@ProductId_Array @PointerPrev+ LEN(@ProductId_Array) @PointerPrev) as int)  Insert into ProductListSpecial (ModuleId ProductId) Values(@ModuleId @TId)  Set NoCount OFF  if @@error=   begin  mit transaction  end  else  begin  rollback transaction  end  GO    网友Bizlogic对此的改进方法:    应该用SQL OpenXML更简单 效率更高 代码更可读     CREATE Procedure [dbo] [ProductListUpdateSpecialList]  (  @ProductId_Array NVARCHAR( )   @ModuleId INT  )    AS    delete from ProductListSpecial where ModuleId=@ModuleId     If empty return  IF (@ProductId_Array IS NULL OR LEN(LTRIM(RTRIM(@ProductId_Array))) = )  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 )  with (ProductId int ) as C  where  C [ProductId] is not null    EXEC sp_xml_removedocument @idoc cha138/Article/program/SQLServer/201311/22113

相关参考

知识大全 SQL Server 2000之日志传送功能 - 描述

SQLServer2000之日志传送功能-描述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当

知识大全 SQL Server 2000之日志传送功能-设定

SQLServer2000之日志传送功能-设定  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  日

知识大全 SQL Server 2000之日志传送功能—问题解决

SQLServer2000之日志传送功能—问题解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 SQL Server参数化查询大数据下的实践

SQLServer参数化查询大数据下的实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  身为一

知识大全 解决SQL Server2000提示挂起的办法

解决SQLServer2000提示挂起的办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  解决

知识大全 SQL Server不允许进行远程连接的解决办法[2]

SQLServer不允许进行远程连接的解决办法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server不允许进行远程连接的解决办法[1]

SQLServer不允许进行远程连接的解决办法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server不允许进行远程连接的解决办法[3]

SQLServer不允许进行远程连接的解决办法[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 解决限制访问SQL Server的IP地址的办法

解决限制访问SQLServer的IP地址的办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 SQL Server 2008安装过程中出现1608错误的解决办法

SQLServer2008安装过程中出现1608错误的解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来