SQL学习笔记[5] - 通过分隔符解析方式实现向SQL存储过程传递数组参数
来源:互联网 发布:linux shell 输入 编辑:程序博客网 时间:2024/06/08 10:09
通过分隔符解析方式实现向SQL存储过程传递数组参数,一维数组比较简单,这里实现二维数组,以下直接代码。
事务我注释掉了,调试的时候用不上,大家需要用的时候自行加上或者删去。
@AccountInfo参数就是数组的完整字符串,通过解析它得到我们要的数组元素,然后用把元素组装到处理具体业务功能的sql语句中,如本例中注释掉的update语句。
执行结果示例附后。
-- =============================================-- Author:<yuexiang>-- Create date: <2015.10.11>-- Description:comfirm back info In OA-- =============================================CREATE PROCEDURE [MaterialControl].[公司级合格厂商银行账户信息确认] -- Add the parameters for the stored procedure here@VendorComID int,@AccountInfo nvarchar(2000),@Comfirmer varchar(30),@ComfirmTime datetime,@SheetNumber varchar(100),@iRel int OUTPUTASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.--BEGIN TRAN --begin transacionDECLARE @tran_error int; -- error codeSET @tran_error = 0;BEGIN TRY declare @location1 int --split index 1declare @location2 int --split index 2declare @split1 char(1) --split 1declare @split2 char(1) --split 2set @split1 = '*'set @split2 = ','declare @str nvarchar(2000)declare @temp1 nvarchar(2000)declare @temp2 nvarchar(2000)declare @id intdeclare @bankname varchar(200)declare @province varchar(50)declare @city varchar(50)declare @accountold varchar(100)declare @accountnew varchar(100)DECLARE @oaStatusCode char(1)PRINT @AccountInfo;set @str=ltrim(rtrim(@AccountInfo))--PRINT @str;set @location1=charindex(@split1,@str) -- 第一级分隔符第一个的位置 --PRINT @location1; SET @temp1 = SUBSTRING(@str,0,CHARINDEX(@split1,@str)) --第一行银行信息 --PRINT @temp1; WHILE @location1<>0BEGINSET @location2=charindex(@split2,@temp1) -- 第二级分隔符第一个的位置 --PRINT @location2;WHILE @location2<>0BEGINSET @temp2 = SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @id = @temp2PRINT @id;SET @temp1= right(@temp1,len(@temp1) - charindex(@split2,@temp1))SET @temp2 = SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @bankname = @temp2PRINT @bankname;SET @temp1= right(@temp1,len(@temp1) - charindex(@split2,@temp1))SET @temp2 = SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @province = @temp2PRINT @province;SET @temp1= right(@temp1,len(@temp1) - charindex(@split2,@temp1))SET @temp2 = SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @city = @temp2PRINT @citySET @temp1= right(@temp1,len(@temp1) - charindex(@split2,@temp1))SET @temp2 = SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @accountold = @temp2PRINT @accountoldSET @temp1= right(@temp1,len(@temp1) - charindex(@split2,@temp1))SET @temp2 = @temp1; --SUBSTRING(@temp1,0,CHARINDEX(@split2,@temp1))SET @accountnew = @temp2PRINT @accountnew--SELECT @oaStatusCode = OA确认代码 FROM MaterialControl.供货商企业级关键信息修改记录表 WHERE ID =@id;--IF(@oaStatusCode = 'A')--BEGIN--UPDATE MaterialControl.供货商企业级银行账户表 SET 开户银行名称 = @bankname,开户银行所在省=@province,开户银行所在市=@city,银行账号=@accountnew WHERE 厂商企标ID=@VendorComID AND 银行账号 =@accountold;--ENDSET @location2=0END--print @strSET @str = right(@str,len(@str) - charindex(@split1,@str));SET @location1=charindex(@split1,@str);SET @temp1 = SUBSTRING(@str,0,CHARINDEX(@split1,@str)) --下一个银行信息;--PRINT @temp1;--PRINT @location1;END--UPDATE MaterialControl.供货商企业级关键信息修改记录表 SET 记录状态代码 = 'C',确认人=@Comfirmer,确认时间=@ComfirmTime WHERE 表单编号 = @SheetNumber;END TRYBEGIN CATCHPRINT '出现异常,错误编号:' + convert(varchar,error_number()) + ',错误消息:' + error_message()SET @tran_error = @tran_error + 1END CATCH--IF(@tran_error > 0)-- BEGIN-- --执行出错,回滚事务-- ROLLBACK TRAN;-- SET @iRel = -1;-- END--ELSE-- BEGIN-- --没有异常,提交事务-- COMMIT TRAN;-- SET @iRel = 1;-- END END
执行参数@AccountInfo='13,招商银行,湖北省,武汉市2,62141111,62142222*14,中国工商银行,广东省,广州市3,62128888,62129999*'
* 是数据元素分隔符
, 是数组元素内部元素的分隔符
执行结果如图所示(环境:sql server 2008)
0 0
- SQL学习笔记[5] - 通过分隔符解析方式实现向SQL存储过程传递数组参数
- SQLServer-存储过程中使用字符串和分隔符实现传递数组参数
- ASP向SQL语句(不是存储过程)传递参数
- 如何向sql server存储过程传递一个数组
- Sql 存储过程传递参数
- 如何给SQL SERVER存储过程传递数组参数
- c#学习之-c#通过sql存储过程实现分页
- SQL学习笔记2(存储过程&参数化)
- SQL Server存储过程数组参数
- SQL Server存储过程数组参数
- SQL Server存储过程数组参数
- 要给SQL SERVER存储过程传递数组参数,应怎么办?
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(一)
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(二)
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(三)
- SQL存储过程通过传送数组字符串参数删除多条记录
- SQL分隔字符串的存储过程
- SQL分隔字符串的存储过程
- linux c++线程池实现 - tbsys实现详解
- 17.Swift 原生网络通信
- php函数---sprintf()
- js学习笔记_匿名函数
- 重新安装无法识别共享磁盘
- SQL学习笔记[5] - 通过分隔符解析方式实现向SQL存储过程传递数组参数
- 黑马程序员——C语言学习笔记03 变量在内存中存储的细节、位运算
- HDU-4430-Yukari's Birthday-暴力+二分
- STL之deque实现
- Android开发,连接到指定WIFI
- Jaxb
- STL之heap实现
- Android与js交互实例
- OS X 10.11 下解决Python-MysqlDB无法使用的问题