基于SQL SERVER 数据仓库,ODS与源数据库字段检查,源表调整后,目标表自动调整

基于SQL SERVER 数据仓库,ODS与源数据库字段检查,源表调整后,目标表自动调整

ALTER PROCEDURE [dbo].[cp_ODS源表字段检查调整]
AS
BEGIN
EXEC [sys].[sp_MSforeachtable]
     @command1='
  DROP TABLE IF EXISTS [#TEMP_NAME]
SELECT [value]=TRIM(TRANSLATE([value],''[]'',SPACE(2)))
      ,[index]=ROW_NUMBER()OVER(ORDER BY GETDATE()) 
  INTO [#TEMP_NAME]
  FROM STRING_SPLIT(''?'',''.'')
IF ''?'' LIKE ''[[]云医疗%'' BEGIN
DECLARE @DBLINK NVARCHAR(100)=(SELECT [value] FROM [#TEMP_NAME] WHERE [index]=1)
       ,@DB     NVARCHAR(100)=(SELECT [value] FROM [#TEMP_NAME] WHERE [index]=2)
       ,@SCHEMA NVARCHAR(100)=''dbo''
       ,@TABLE  NVARCHAR(100)=(SELECT [value] FROM [#TEMP_NAME] WHERE [index]=3) 
DECLARE @SROUCE NVARCHAR(500)=CONCAT_WS(''.'',QUOTENAME(@DBLINK),QUOTENAME(@DB),QUOTENAME(@SCHEMA),QUOTENAME(@TABLE))
       ,@SQL    NVARCHAR(MAX)=CONCAT(''SELECT * FROM ['',@DBLINK,''].['',@DB,''].[INFORMATION_SCHEMA].[COLUMNS] WHERE [TABLE_NAME]='''''',@TABLE,'''''' '')     
       ,@SFTN   NVARCHAR(500)=CONCAT(QUOTENAME(@DBLINK),''.'',QUOTENAME(@DB),''.[INFORMATION_SCHEMA].[COLUMNS]'')
   SET @SQL=CONCAT(''
SELECT @TGT_NAME='''''',QUOTENAME(@DBLINK),''.['',@DB,''.'',@TABLE,'']''''
  FROM '',@SFTN,'' src 
  LEFT JOIN [INFORMATION_SCHEMA].[COLUMNS] tgt
    ON tgt.[COLUMN_NAME]=src.[COLUMN_NAME]
   AND tgt.[TABLE_NAME]='''''',CONCAT(@DB,''.'',@TABLE),''''''
 WHERE src.[TABLE_NAME]='''''',@TABLE,''''''
   AND tgt.[COLUMN_NAME] IS NULL
  '')
  DECLARE @TGT_TABLE_NAME NVARCHAR(200)
  EXEC SP_EXECUTESQL @SQL,N''@TGT_NAME NVARCHAR(200) OUTPUT'',@TGT_NAME=@TGT_TABLE_NAME OUTPUT
   
  IF @TGT_TABLE_NAME IS NOT NULL BEGIN
     SET @SQL=CONCAT(''
       DROP TABLE IF EXISTS '',@TGT_TABLE_NAME,'';
       EXEC [dbo].[cp_ODS集成构造器] 
            @source = '''''',@SROUCE,'''''';'') 
      PRINT (@SQL)
       EXEC SP_EXECUTESQL @SQL
  END
END
     '
 
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值