• 根据配置表将数据从A表转入B表


    --创建存储过程
    CREATE PROCEDURE TransferToHistory AS
    BEGIN
      --不返回计数
      SET NOCOUNT ON;
      --开始捕捉异常
      BEGIN TRY
        -- 声明配置表变量
        DECLARE @config TABLE (id NVARCHAR(5));
        --创建临时A表
        CREATE TABLE #temp(id INT,t_a VARCHAR(15),t_b INT,......);
        -- 将配置表中的数据插入到配置表变量中
        INSERT INTO @config(id) SELECT id FROM config ORDER BY id;	
        -- 声明变量	
        DECLARE @sql NVARCHAR(MAX),@id NVARCHAR(5);
          --循环配置表	
          WHILE EXISTS(SELECT id FROM @config)	
          BEGIN
            --将条件赋值给变量中
            SELECT @id = id FROM @config ORDER BY id;
            --初始化临时表插入500条
            SET @sql ='SELECT TOP 500 id,a,b FROM A_'+ @id +' WITH(NOLOCK) WHERE time <= CONVERT(varchar(10),DATEADD(MONTH,-2,GETDATE()),112) ORDER BY id;';
            INSERT INTO #temp(id,t_a,t_b)
            EXEC (@sql);
            --判断临时表是否存在数据
            WHILE (SELECT COUNT(1) FROM #temp)>0
              BEGIN
                --将临时表数据插入到B表并删除A表数据和临时表数据
                SET @sql='INSERT INTO history(type_id,t_a,t_b)
                      SELECT type_id=' + @id + ',t_a,t_b FROM #temp;	  
                      DELETE A FROM A_' + @id + ' AS A INNER JOIN #temp AS B ON A.id=B.id;
                      DELETE #temp;'
                EXEC (@sql);
                --如果A表存在数据继续插入500条到临时表
                SET @sql ='SELECT TOP 500 id,a,b FROM A_'+ @id +' WITH(NOLOCK) WHERE time <= CONVERT(varchar(10),DATEADD(MONTH,-2,GETDATE()),112) ORDER BY id;';
    			    INSERT INTO #temp(id,t_a,t_b)
                EXEC (@sql);
              END
              --该条件已全部转完从临时配置表删除
              DELETE FROM @config WHERE id=@id;
            END
          --使用完删除临时表
          DROP TABLE #temp;
    	END TRY-----------结束捕捉异常
        BEGIN CATCH------------有异常被捕获
        DROP TABLE #temp;
        SELECT ERROR_NUMBER() AS ErrorNumber,ERROR_SEVERITY() AS ErrorSeverity,ERROR_STATE() AS ErrorState,ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine,ERROR_MESSAGE() AS ErrorMessage
        END CATCH--------结束异常处理
    END
    

      

  • 相关阅读:
    SVN版本库修改URL路径或者IP地址
    ES-PHP向ES批量添加文档报No alive nodes found in your cluster
    ansible IP
    ansible ansible_os_family == "RedHat" and ansible_lsb.major_release|int >= 6 转为数字比大小
    Centos下Yum安装PHP5.5,5.6,7.0
    centos6.8上yum安装zabbix3.2
    线性筛的理解及应用
    5分钟使用docker搭建一个WordPress
    使用 Docker-Compose 编排容器
    Bootstrap基础
  • 原文地址:https://www.cnblogs.com/zhm001/p/11727330.html
Copyright © 2020-2023  润新知