• 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

  • 相关阅读:
    【业务功能篇91】微服务-springcloud-多线程-线程池执行顺序
    基于微信小程序的健身房私教预约平台设计与实现(源码+lw+部署文档+讲解等)
    数字孪生北京故宫,元宇宙推进旅游业进程
    react项目配置(类组件、函数式组件)
    Qt存手撸界面
    提高篇(七):Processing与物联网的结合:如何创建智能互动艺术装置
    web前端期末大作业 html+css+javascript汽车介绍网页设计实例 企业网站制作(带报告3490字)
    MidJourneyAI绘画之月满中秋情更浓
    吉利银河L6顶配 官方OTA升级降低充电速度
    MyBatis框架
  • 原文地址:https://blog.csdn.net/u013597888/article/details/134026582