热门标签 | 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

 


推荐阅读
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 如何在PHPcms网站中添加广告
    本文详细介绍了在PHPcms网站后台添加广告的方法,涵盖多种常见的广告形式,如百度广告和Google广告,并提供了相关设置的步骤。同时,文章还探讨了优化网站流量的SEO策略。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
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社区 版权所有