获取格式字符串第idx个值及实例
--根据索引idx值获取格式串中第idx个值 如数据'11,12,13,14,15,16'
方法:格式串+分隔符;@str='11,12,13,14,15,16'+','
select dbo.GetStrByindex('11,12,13,14,15,16,', ',', 3); -- 13
create function [dbo].[GetStrByindex](@str varchar(8000),@split varchar(10),@idx int)
--@str:待查找字符串
returns varchar(100)
as
begin
declare @inx int
set @inx=0
WHILE(CHARINDEX(@split,@str)<>0)
begin
SET @INX=@INX+1
if @inx=@idx
--第一个@split之前的字符串
return SUBSTRING(@str,1,CHARINDEX(@split,@str)-1)
--将第一个@split后面的字符串重新赋给@str
SET @str=STUFF(@str,1,CHARINDEX(@split,@str),'')
end
return '';
end
GO
此过程可能在数据维护时,偶尔会遇到。
/*
参数1:@Type 整型 0:新增1:修改2:删除
参数2:@Weld_id 字符串 主表GuID
参数3:@Param 字符串,需严格按照如下格式组织(字段内容中不包含字符“|”)
民工|日期|方法|层次|电流|电压|标识号1|牌号1|规格1|标识号2|牌号2|规格2
参数4:@ID 整型 子表唯一字典 返回值 -1: 插入成功; 0:更新成功; 1:参数@Param格式错误; 2:日期格式错误; 3:更新失败; 4: 插入失败; 5:删除成功
SQL调用实例
*/
if (exists (select * from sys.objects where name = 'up_OperateWeld_Container'))
drop proc up_OperateWeld_Container
go
Create PROC [dbo].[up_OperateWeld_Container]
(
@Type int, --0: 新增 1:修改 2:删除
@Weld_id varchar(100), --主表guid
@Param nvarchar(4000),
@ID int = -1 --新增无用。修改,删除时需传入该ID,定位修改删除信息
)
as
--判断参数是否正常
if len(@Param+'|')-len(replace(@Param+'|', '|', ''))<>12
return 1; --参数2格式错误
--解析参数
declare @SQL varchar(8000), @Count int,
@Param1 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 1),
@Param2 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 2), --日期信息
@Param3 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 3),
@Param4 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 4),
@Param5 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 5),
@Param6 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 6),
@Param7 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 7),
@Param8 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 8),
@Param9 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 9),
@Param10 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 10),
@Param11 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 11),
@Param12 varchar(50) = dbo.GetStrByindex(@Param+'|', '|', 12);
if isdate(@Param2)<>1
return 2 --日期无效
if @Type=0
begin
--不存在则插入
begin try
begin tran
--插入焊工操作
insert into info_detail(Weld_id, col1, date, col3,col4,col5,col6,col7,col8,col9,col10,col11,col12)
values (@Weld_id,@Param1,@Param2,@Param3,@Param4,@Param5,@Param6,@Param7,@Param8,
@Param9,@Param10,@Param11,@Param12);
commit tran
return -1 --插入成功
end try
begin catch
rollback;
return 4 --插入失败
end catch
end else if @Type=1 begin
begin try
begin tran
--更新焊工操作
update info_detail set col1 = @Param1,
date = @Param2,
col3 = @Param3,
col4 = @Param4,
col5 = @Param5,
col6 = @Param6,
col7 = @Param7,
col8 = @Param8,
col9 = @Param9,
col10 = @Param10,
col11 = @Param11,
col12 = @Param12
where ID=@ID;
commit tran
return 0 --更新成功
end try
begin catch
rollback;
return 3 --更新失败
end catch;
end else begin
--删除成功
delete from info_detail where ID=@ID;
return 5;
end;
GO /*
调用实例 --新增
declare @idx int
exec @idx=up_OperateWeld_Container 0, 'b8f8964a-3e0e-47ce-8302-097c68bd7033',
'100|2019-09-12|SAW|层次|电流|电压|标识号1|牌号1|规格1|标识号2|牌号2|规格2',
-1
select @idx --修改
declare @idx int
exec @idx=up_OperateWeld_Container 1, 'b8f8964a-3e0e-47ce-8302-097c68bd7033',
'100|2019-09-12|SAW|层次|电流|电压|标识号1|牌号1|规格1|adfdf|牌号2|规格2',
49217
select @idx --删除
declare @idx int
exec @idx=up_OperateWeld_Container 2, 'b8f8964a-3e0e-47ce-8302-097c68bd7033',
'100|2019-09-12|方法|层次|电流|电压|标识号1|牌号1|规格1|标识号2|牌号2|规格2',
49217
select @idx
*/
获取格式字符串第idx个值及实例的更多相关文章
- Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值
参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...
- c# json转换成dynamic对象,然后在dynamic对象中动态获取指定字符串列表中的值
using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.T ...
- C#获取Json字符串中的某个值
问题描述: json数据格式{"resCode":0,"resMag":"aaa","data":[{"par ...
- 获取xml字符串中的属性值
pagexml = @"<?xml version='1.0' encoding='utf-8'?> <DATAPACKET Version='2.0'> <M ...
- JQuery设置获取下拉菜单选项的值 多实例
分享下JQuery如何设置获取下拉菜单某个选项的值,多种方法,值得收藏. JQuery获取和设置Select选项 获取Select :获取select 选中的 text :$(“#ddlRegType ...
- 获取Json数据某节点的值
时间匆忙,直接上代码,回家还得做清蒸鱼呢! #region 获取Json字符串某节点的值 /// <summary> /// 获取Json字符串某节点的值 /// </summary ...
- 获取字符串对应的MD5值 (AL16UTF16LE)
CREATE OR REPLACE FUNCTION fn_md5_utf16le (InputString IN VARCHAR2) RETURN VARCHAR2 IS retval ); /** ...
- .NET获取Html字符串中指定标签的指定属性的值
using System.Text; using System.Text.RegularExpressions; //以上为要用到的命名空间 /// <summary> /// 获取Htm ...
- JS如何获取url查询字符串的键和值?
/** * 根据url查询字符串里的键名获取其值 */function getSearchString(key, search) { // 获取URL中?之后的字符 var str = search; ...
随机推荐
- Linux文本处理三剑客之sed
推荐新手阅读[酷壳]或[骏马金龙]开篇的教程作为入门.骏马兄后面的文章以及官方英文文档较难. [酷壳]:https://coolshell.cn/articles/9104.html [骏马金龙-博客 ...
- 一个经典的代码--Convert char to int in C and C++
前记 写程序,就像建房子,对于高超的建筑师来说,是要有一些好的素材的.作为一个程序员,见了好用的素材存起来,以备后面需要,也是一门很好的修养. 实例代码 一个char 转int的经典代码,这里分享一下 ...
- 流程图软件 drawio 免费 github开源
做程序需要画流程图,发现迅捷流程图的在线版挺好用的,但是,它的导出只允许VIP会员,不是VIP会员只能导出xsd文件,而且要注册账号,极为麻烦. 在知乎看到了一位网友的评论,有一款软件和迅捷流程图一模 ...
- 爬虫(二):抓包工具Fiddler
1. 抓包工具Fiddler 1.1 Fiddler下载与安装 最简单的方法,打开百度,搜索fiddler下载. 下载完毕解压即可,此版本为绿色版. 点击这个即可运行抓包软件. 1.2 Fiddler ...
- VO(视图模型) 与 DTO(数据传输对象)的区别
目录 VO(视图模型) 与 DTO(数据传输对象)的区别 1.VO与DTO概念 2.VO 视图模型的必要性与解耦 2.1 视图模型 2.2 视图模型存在的必要性 2.3 视图模型的解耦 3.DTO 存 ...
- UML简单介绍—类图详解
类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...
- 【漏洞预警】Redis 4.x/5.x 远程命令执行高危漏洞
2019年7月09日,阿里云应急响应中心监测到有安全研究人员披露Redis 4.x/5.x 远程命令执行高危漏洞利用代码工具.针对未授权或弱口令的Redis服务,攻击者通过构造特定请求,成功利用漏洞可 ...
- 项目中遇到的问题:IDEA maven项目报错:程序包com.sun.image.codec.jpeg不存在
错误截图: 解决方法:在pom.xml文件中间加上以下代码: 代码: <plugin> <groupId>org.apache.maven.plugins</groupI ...
- Linux搭建图片服务器减轻传统服务器的压力(nginx+vsftpd)
传统项目中的图片管理 传统项目中,可以在web项目中添加一个文件夹,来存放上传的图片.例如在工程的根目录WebRoot下创建一个images文件夹.把图片存放在此文件夹中就可以直接使用在工程中引用. ...
- 经典案例:如何优化Oracle使用DBlink的SQL语句
转自 https://blog.csdn.net/Enmotech/article/details/78788083 作者介绍 赵全文 就职于太极计算机股份有限公司,在中央电化教育馆做Oracle D ...