热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为SQLServer数据库传数组参数的变通办法

最近一直在做Dnn模块的开发,过程中碰到这么一个问题,需要同时插入N条数据,不想在程序里控制,但是SQLSever又不支持数组参数.所以只能用变通的办法了.利用SQLServer强大的字符串处理传

 最近一直在做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

  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

 


推荐阅读
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 【MySQL】frm文件解析
    官网说明:http:dev.mysql.comdocinternalsenfrm-file-format.htmlfrm是MySQL表结构定义文件,通常frm文件是不会损坏的,但是如果 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 美团安全响应中心推出全新配送业务测试活动,带来双重福利,邀您共同参与! ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
author-avatar
玩心跳2502893007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有