Sqlserver存储过程—----传递数组、使用循环
发布时间:2020-12-12 14:50:06 所属栏目:MsSql教程 来源:网络整理
导读:背景: 前一段时间做过一个公司内部的员工项目管理系统,其间有个 sqlserver 存储过程是要从 excel 文件中读取员工的项目信息,并从 db 中找出相关的的其他信息插入到一张员工表中。这里涉及两个难点:怎么向存储过程传递多条记录?在存储过程中怎么对这些记
背景: 前一段时间做过一个公司内部的员工项目管理系统,其间有个sqlserver存储过程是要从excel文件中读取员工的项目信息,并从db中找出相关的的其他信息插入到一张员工表中。这里涉及两个难点:怎么向存储过程传递多条记录?在存储过程中怎么对这些记录一条条循环处理。 解决方案: 1.??????怎么将excel中数据传入到存储过程中? 存储过程是没有办法接受数组参数的,我的做法是先把excel中的信息导入到一张全局的临时表中,在把临时表的表名传递给存储过程,在存储过程中使用临时表内容。 2.??????怎么在存储过程中做循环处理? 在存储过程中新建一张临时表,将传递过来的全局临时表的信息保存在该表中,并且在表中添加一个id列,对记录从一开始计数。使用count函数计算记录的个数,使用while语句对id从1到count进行循环 代码: ?1.创建临时表: IF OBJECT_ID('dbo.create_tempTable') IS NOT NULL DROP PROC dbo.create_tempTable; GO CREATE PROC dbo.create_tempTable AS CREATE TABLE ##tempexcel( pjid char(6),--项目id userid char(6),--用户id PRIMARY KEY(pjid,userid) ) GO 2.具体操作的存储过程:
IF OBJECT_ID('dbo.Staff_insert') IS NOT NULL DROP PROC dbo.Staff_insert; GO CREATE PROC dbo.Staff_insert @temptableName nvarchar(20)--临时表名 AS BEGIN --用于实现循环的临时表,intID列用于从1开始对记录计数 CREATE TABLE #excelData(intID int identity(1,1),pjid char(6),userid char(6)); --将全局临时表中的数据插入到临时表中 INSERT INTO #excelData(pjid,userid) EXEC('SELECT pjid,userid FROM '+ @temptableName); --计算记录的个数 SELECT @count= COUNT(1) FROM #excelData; --如果记录存在,进入循环 IF(@count > 0) BEGIN SET @i = 1;--循环变量 WHILE(@i <= @count) BEGIN -- 根据intid取出要操作的记录 SELECT @pjid=pjid,@userid=userid FROM #excelData WHERE intID = @i; --其他操作 -- -- END END END (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |