当前位置: 首页 > news >正文

SQL比较两次的字段集合,找出并返回差异,主要用于更新记录事件

Create PROCEDURE [dbo].[SysGetTableFieldsCompare] 


-- Description:    <比较两次的字段集合,找出并返回差异,主要用于更新记录事件>
-- Return 0- 成功, -1- 没有这个表
-- Rev: 1.00
-- =============================================
@FieldsSource Nvarchar(max) ='',
@FieldsTarget Nvarchar(max) ='',
@FieldsChanged nvarchar(max) ='' output 

AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

   if @FieldsSource is null or rtrim(@FieldsSource)='' 
    or @FieldsTarget is null or rtrim(@FieldsTarget)=''
    return -1

--    set @FieldsSource='[ABC]1'
--    set @FieldsTarget='[ABC]2'

    set @FieldsChanged=''
    declare @i int
    declare @FieldsSave nvarchar(max)
    declare @FieldName nvarchar(100)
    declare @FieldValue1 nvarchar(max)
    declare @FieldValue2 nvarchar(max)
    set @i=0
    while  CHARINDEX('[',@FieldsSource)>0 and CHARINDEX(']',@FieldsSource)>0  -- @i<len(@FieldsSource) 
      begin
        if charindex(']',@FieldsSource)>0
        begin  
            set @FieldName=    substring(@FieldsSource,0,charindex(']',@FieldsSource)+1)

            --取字段值
            if charindex(' [',@FieldsSource)>0
            begin
                set @FieldsSource=substring(@FieldsSource,charindex(']',@FieldsSource)+1,len(@FieldsSource))
                set @FieldValue1=rtrim(ltrim(substring(@FieldsSource,0,charindex(' [',@FieldsSource))))
                set @FieldsSource=rtrim(ltrim(substring(@FieldsSource,len(@FieldValue1)+1,len(@FieldsSource))))                
                        
                --取得变更后的字段值

                set @FieldsSave=substring(@FieldsTarget,charindex(@FieldName,@FieldsTarget)+len(@FieldName),len(@FieldsTarget))
                if charindex(' [',@FieldsSave)>0
                    set @FieldValue2=rtrim(ltrim(substring(@FieldsSave,0,charindex(' [',@FieldsSave))))

                if charindex(' [',@FieldsSave)=0
                    set @FieldValue2=rtrim(ltrim(substring(@FieldsSave,0,len(@FieldsSave))))
                
                --开始比较
                if ltrim(rtrim(@FieldValue1))<>rtrim(ltrim(@FieldValue2))
                begin                    
                    set @FieldsChanged=@FieldsChanged+@FieldName+@FieldValue1+'->'+@FieldValue2 + ' '                    
                end 
            end
            else
            begin
                set @FieldValue1=ltrim(substring(@FieldsSource,charindex(']',@FieldsSource)+1,len(@FieldsSource)))
                --取得变更后的字段值

                set @FieldsSave=ltrim(substring(@FieldsTarget,charindex(@FieldName,@FieldsTarget)+len(@FieldName),len(@FieldsTarget)))
                if charindex(' [',@FieldsSave)>0
                    set @FieldValue2=rtrim(ltrim(substring(@FieldsSave,0,charindex(' [',@FieldsSave))))

                if charindex(' [',@FieldsSave)=0
                    set @FieldValue2=rtrim(ltrim(substring(@FieldsSave,0,len(@FieldsSave)+1000)))

                --开始比较
                if ltrim(rtrim(@FieldValue1))<>rtrim(ltrim(@FieldValue2))
                begin                    
                    set @FieldsChanged=@FieldsChanged+@FieldName+@FieldValue1+'->'+@FieldValue2 + ' '                    
                end
                break
            end  
        end
        else
        begin
            break
        end
        set @i=@i+1 
      end    
return 0

http://www.lryc.cn/news/210856.html

相关文章:

  • muduo源码剖析之Acceptor监听类
  • express session JWT JSON Web Token
  • 负载均衡策略 LVS
  • 驱动开发6 IO多路复用——epoll
  • 【python学习笔记——列表】
  • TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
  • [微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
  • USACO12OPEN Balanced Cow Subsets G(meet in the middle)
  • GIT常用操作记录
  • 【ETL工具】Datax-ETL-SqlServerToHDFS
  • Kubernetes (K8S)概述
  • 11月14号|Move生态Meetup相约浪漫土耳其
  • mac vim没有颜色 问题
  • Servlet核心API
  • crs 维护模式 exclusive mode
  • 【OpenCV实现平滑图像形态学变化】
  • Ubuntu服务器中java -jar 后台运行Spring Boot项目
  • 微服务parent工程和子工程pom文件配置注意
  • STM32G030F6P6点灯闪烁
  • K8s开发人员也需要了解的相关知识
  • 创建并启动华为HarmonyOS本地与远程模拟器及远程真机
  • 责任链模式应用案例
  • 给你一个整数 num ,返回 num 中能整除 num 的数位的数目
  • Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)
  • 2023.10.28 关于 synchronized 原理
  • 力扣 27. 移除元素
  • redis爆满导致数据丢失
  • Android14 WMS启动流程
  • 磁盘管理(初始化,引导块,坏块管理,固态硬盘)
  • mysql冷拷贝大表