Есть таблица 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
, или какая-то точка, которая будет означать - данные были перенесены в эту точку и в следующий раз они будут перенесены из этой точки?
Ваши знания действительно помогут мне как написать эффективную процедуру.