我有一个PI_Catalogue_Update表,它将多个原始表中的架构名称,表名,Count(*)存储为Volume和Max(ETLRunTime)作为LastUpdate。如何构建一个查询,该查询将使用PI_Catalogue_Update中的SchemaName和TableName,并查询原始表,并在每次运行SP时更新卷和LastUpdate。动态SQL更新一个表格形式多表?
可能我需要一些动态SQL。但我仍然无法弄清楚如何去做。
表的样子:
SchemaName TableName Volume LastUpdate
ProdInsights_In abc 4680816 2017-06-04 00:00:00.000
ProdInsights_In bcd 52250 2017-06-04 00:00:00.000
ProdInsights_In def 744225 2017-06-04 00:00:00.000
ProdInsights_In gih 668502 2017-06-04 00:00:00.000
我写的查询是这样做的另一种方式,我创建了一个视图形成原始表,[ProdInsights_In] [View_Table_Catalogue] .View的样子:
CREATE VIEW [ProdInsights_In].[View_Table_Catalogue] AS
select
'ProdInsights_In' as SchemaName
,'abc' as TableName
,Count(*) Volume
,MAX(ETLRunTime) as LastUpdate
From [ProdInsights_In].[abc]
Union All
select
'ProdInsights_In' as SchemaName
,'bcd' as TableName
,Count(*) Volume
,MAX(ETLRunTime) as LastUpdate
From [ProdInsights_In].[bcd]
Union All ....
然后,我使用以下SP从视图更新PI_Catalogue_Update表。 过程是这样的:
MERGE
INTO [dbo].[PI_Project_Catalogue] t1
USING [ProdInsights_In].[View_Table_Catalogue] t2
ON t1.SchemaName = t2.SchemaName
and t1.TableName = t2.TableName
WHEN MATCHED THEN
UPDATE
SET t1.Volume = t2.Volume
,t1.LastUpdate = t2.LastUpdate
WHEN NOT MATCHED THEN
INSERT (SchemaName, TableName, Volume, LastUpdate)
VALUES (t2.SchemaName. t2.TableName, t2.Volume, t2.LastUpdate)
我建议你使用触发器,而不是动态查询https://docs.microsoft.com/en -us/sql/t-sql/statements/create-trigger-transact-sql –
您能否发布您迄今为止撰写的查询? –
我用我的代码编辑了问题部分。谢谢。 – DataPsycho