• 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       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

  • 相关阅读:
    二叉树相关知识
    Ubuntu安装、卸载Docker,常用镜像、容器操作命令
    Java并发编程学习笔记6——共享模型之不可变
    亚马逊英国站小风扇UKCA认证办理流程
    python之最简单的车辆检测(opencv方式)
    STM32(五):STM32指南者-按键控制灯开关实验
    Windows 根据dll生成 lib文件
    Tsinghua:Finding Skill Neurons in Pre-trained Transformer-based Language Models
    arm64架构安装kubeedge报错:Unit kubepods.slice already exists
    ElasticSearch集群服务器配置
  • 原文地址:https://blog.csdn.net/u013597888/article/details/134026582