首页 > 解决方案 > 使用来自不同表过程的附加数据更新现有表

问题描述

有一个表格WebSummary,其中包含来自不同表格的汇总数据,这些表格连续收集数据。我必须创建一个过程,将这些表中的新数据添加到WebSummary.

我有草稿,我不确定它是否正确,但是如何修改它以仅插入新数据,因为旧数据已经存在。

CREATE PROCEDURE WebLogTransfer 
AS
BEGIN 
SET NOCOUNT ON;

BEGIN TRAN

SELECT * INTO #transfer FROM (

SELECT cast(LogDate AS DATE) LogDate, LogUser, LogPCName, [Log222ID], Count(*) LogCount
FROM [IS3].[ApplicationAccessLog].[dbo].[WebAppLog]
GROUP BY cast(LogDate AS DATE), LogUser, [Log222ID], LogPCName

UNION ALL

SELECT cast(LogDate AS DATE) LogDate, LogUser COLLATE SQL_Latin1_General_CP1_CI_AS, LogPCName COLLATE SQL_Latin1_General_CP1_CI_AS, [Log222ID] , Count(*) LogCount
FROM [IS2].[ApplicationAccessLog].[dbo].[WebAppLog]
GROUP BY cast(LogDate AS DATE), LogUser, [Log222ID], LogPCName

UNION ALL

SELECT cast(LogDate AS DATE) LogDate, LogUser, LogPCName, [Log222ID], Count(*) LogCount
FROM [IS1].[ApplicationAccessLog].[dbo].[WebAppLog]
GROUP BY cast(LogDate AS DATE), LogUser, [Log222ID], LogPCName

UNION ALL

SELECT cast(LogDate AS DATE) LogDate, LogUser, LogPCName, [Log222ID], Count(*) LogCount 
FROM [IS].[ApplicationAccessLog].[dbo].[WebAppLog]
GROUP BY cast(LogDate AS DATE), LogUser, [Log222ID], LogPCName

ORDER BY 1
) a


INSERT INTO [IS3].[ApplicationAccessLog].[dbo].[WebSummary] (LogDate, LogUser, LogPCName, Log222ID, LogCount) 
    SELECT LogDate, LogUser, LogPCName, Log222ID, LogCount
    FROM #transfer 

IF @@TRANCOUNT > 0
  BEGIN
    ROLLBACK TRAN
  END 

COMMIT TRAN

DROP TABLE #transfer


END
GO

是否应该有一个JOIN、 或IF EXISTS或某个点表示 - 数据已传输到该点,下次将从该点传输?

你的知识真的会帮助我如何编写一个有效的程序。

标签: sqlsql-server

解决方案


推荐阅读