• 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

  • 相关阅读:
    基于Python实现一个庆祝中秋节的小程序
    Why does PXE boot with grub2 and UEFI fails with error “File not found“ ?
    GBase 8c 设置账户有效期
    Win11系统C++将ONNX转换为engineer文件,TensorRT加速推理
    Java中常量池在堆中?
    课设之跨网段攻击
    CSS简介
    AISummit全球人工智能技术大会,洞悉AI技术的现在与未来
    本地GPT-window平台 搭建ChatGLM3-6B
    Eureka服务注册中心
  • 原文地址:https://blog.csdn.net/u013597888/article/details/134026582