sql - 使用来自不同表过程的附加数据更新现有表
问题描述
有一个表格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
或某个点表示 - 数据已传输到该点,下次将从该点传输?
你的知识真的会帮助我如何编写一个有效的程序。
解决方案
推荐阅读
- reactjs - reactjs中如何更新OwlCarousel的项目
- r - 如果运行两次,应用函数返回列表列表
- css - Angular 5 自定义 CSS
- java - 为什么 onFling() 在 ListView 中不起作用?
- unit-testing - 如何使用 Jest 对 quasar 应用程序进行单元测试?
- asp.net-core - 是否可以为 SwaggerUI 动态添加 SwaggerEndpoints?
- love2d - 如何调试moonscript?
- php - 自定义构建的评论插件 - 分页不起作用
- c# - 反序列化 Razor 编码的表单数据(在 JSON 中)
- mysql - 不知道为什么会发生这种语法错误