zoukankan      html  css  js  c++  java
  • MERGE同步


     
     alter proc test @sourcetablename varchar(30),
      @targettablename varchar(200),
      @id varchar(8)
     as
     declare @cols varchar(max);
     declare @cols1 varchar(max);
     declare @cols2 varchar(max);

     with cols
            as (
                select columns.name,'s.'+columns.name name1,
                    'd.'+columns.name+'='+'s.'+columns.name name2
                  from sys.columns
                    join sys.objects
                    on sys.columns.object_id=sys.objects.object_id
                       and objects.name=@sourcetablename
               )
      select @cols=(stuff((
                           select ',' + name from cols t
                          for
                           xml path('')
                          ),1,1,'')),@cols1=(stuff((
                                                    select ',' + name1 from cols t
                                                   for
                                                    xml path('')
                                                   ),1,1,'')),
          @cols2=(stuff((
                         select ',' + name2 from cols t
                        for
                         xml path('')
                        ),1,1,''))
                         
     
     select @cols2=replace(@cols2,('d.'+@id+'=s.'+@id+','),'')

     
     declare @sql varchar(max)

     set @sql='set identity_insert '+@targettablename+' ON;'+'

    MERGE '+@targettablename+' with (TABLOCKX)   AS d
      USING '+@sourcetablename+' AS s
      ON s.'+@id+'=d.'+@id+'
      WHEN NOT MATCHED BY TARGET
        THEN 
        INSERT ('+@cols+')
          VALUES ('+@cols1+')
      WHEN NOT MATCHED BY SOURCE
        THEN 
        DELETE
      WHEN MATCHED
        THEN 
        UPDATE
          SET  '+@cols2+'
         
          ;'+'set identity_insert '+@targettablename+' off'
      
     exec    (@sql)
       
     
    go
     exec test 'Student','[Student2]','StuId'
     
     --select obj.name,*
     -- from sys.columns col
     --   join sys.objects obj
     --   on col.object_id=obj.object_id
     --  -- where obj.name='Student'
     --   and  is_identity=1

  • 相关阅读:
    Java 8实战之读书笔记五:超越Java 8
    Quartz的简单使用
    Quartz实现数据库动态配置定时任务
    Java解析Groovy和Shell的代码
    Spring学习笔记(3)——快速入门
    linux的防火墙端口配置
    气泡提示 纯CSS
    解决LINUX下SQLPLUS时上下左右键乱码问题
    redhat Enterprise Linux 6 VNC安装
    使用mount命令挂载CDROM
  • 原文地址:https://www.cnblogs.com/qanholas/p/2473245.html
Copyright © 2011-2022 走看看