• Sqlserver存储过程—传递数组、使用循环


    背景:

    前一段时间做过一个公司内部的员工项目管理系统,其间有个sqlserver存储过程是要从excel文件中读取员工的项目信息,并从db中找出相关的的其他信息插入到一张员工表中。这里涉及两个难点:怎么向存储过程传递多条记录?在存储过程中怎么对这些记录一条条循环处理。

    解决方案:

    1.      怎么将excel中数据传入到存储过程中?

    存储过程是没有办法接受数组参数的,我的做法是先把excel中的信息导入到一张全局的临时表中,在把临时表的表名传递给存储过程,在存储过程中使用临时表内容。

    2.      怎么在存储过程中做循环处理?

    在存储过程中新建一张临时表,将传递过来的全局临时表的信息保存在该表中,并且在表中添加一个id列,对记录从一开始计数。使用count函数计算记录的个数,使用while语句对id1count进行循环

    代码:

     1.创建临时表:

     

    01 IF OBJECT_ID('dbo.create_tempTable') IS NOT NULL
    02     DROP PROC dbo.create_tempTable;
    03 GO
    04 CREATE PROC dbo.create_tempTable   
    05 AS 
    06     CREATE TABLE ##tempexcel(
    07         pjid char(6),--项目id
    08         userid char(6),--用户id
    09         PRIMARY KEY(pjid, userid)
    10     )  
    11 GO

     

    2.具体操作的存储过程:

     

    01 IF OBJECT_ID('dbo.Staff_insert') IS NOT NULL
    02     DROP PROC dbo.Staff_insert;
    03 GO
    04 CREATE PROC dbo.Staff_insert
    05     @temptableName nvarchar(20)--临时表名
    06 AS
    07 BEGIN
    08     --用于实现循环的临时表,intID列用于从1开始对记录计数
    09     CREATE TABLE #excelData(intID int identity(1,1),pjid char(6),userid char(6));
    10     --将全局临时表中的数据插入到临时表中
    11     INSERT INTO #excelData(pjid,userid) EXEC('SELECT pjid, userid FROM '+ @temptableName);
    12     --计算记录的个数
    13     SELECT @count= COUNT(1) FROM #excelData;
    14     --如果记录存在,进入循环
    15     IF(@count > 0)
    16     BEGIN
    17         SET @i = 1;--循环变量              
    18         WHILE(@i <= @count)
    19         BEGIN
    20             -- 根据intid取出要操作的记录
    21             SELECT @pjid=pjid,@userid=userid FROM #excelData WHERE intID = @i;
    22             --其他操作
    23             --
    24             --
    25         END
    26     END
    27 END

     

  • 相关阅读:
    分享2021年陆陆续续看过的电影-附电影名单
    LEPUS开源数据库监控系统-开源的MySQL/Oracle/MongoDB/Redis一站式数据库专业级性能监控系统
    分享2021年陆陆续续读过的书-附书单
    Jmeter压测报错:Non HTTP response code: java.net.ConnectExceptionexception的解决办法
    adb安装apk包时提示:device unauthorized
    Pyhton AES_cbc解密
    appium— Android定位webView里面的UI元素
    appium自动化测试实战
    Appium + Python环境搭建(移动端自动化)
    selenium自动化定位方法
  • 原文地址:https://www.cnblogs.com/quanyj/p/2978445.html
Copyright © 2020-2023  润新知