我正在使用SQL Server 2005
我使用此查询填充表格:
USE [MyDB]
INSERT INTO dbo.Summaries
SELECT DISTINCT TOP (100) PERCENT
s.Kiosk_ID, k.kioskName, u.Owner_id, o.DisplayName, u.value,
COUNT(u.value) AS ValueCount, k.KioskGroup_ID,
CONVERT(varchar, u.DateTime, 112) as date,
'Marketing' AS DBName
FROM
dbo.k_UsageLog AS u
INNER JOIN
dbo.K_Owner AS o ON o.Owner_id = u.Owner_id
INNER JOIN
dbo.k_Session AS s ON u.Session_id = s.Session_id
INNER JOIN
dbo.Kiosk AS k ON k.Kiosk_ID = s.Kiosk_ID
WHERE
(o.Owner_id > 12)
GROUP BY
s.Kiosk_ID, u.Owner_id, u.value, k.KioskGroup_ID, o.DisplayName,
CONVERT(varchar, u.DateTime, 112), k.kioskName
ORDER BY
s.Kiosk_ID
我需要每晚运行一次,只添加新行。
我想过简单地使用一个时间戳并只添加昨天的数据,但是一些向数据库报告的单位可能一次离线几天,并且在最终连接时会发送几天的数据。
我知道我需要像MERGE
这样的东西(感谢marc_s我现在知道它不包含在MS SQL Server 2005中),但我无法弄清楚如何让它工作。非常感谢帮助。
答案 0 :(得分:1)
如果问题是检测行是否是新行,您可以尝试向表中添加哈希列(或者表格,取决于您是如何进行插入的。)
我们将CHECKSUM(*),BINARY_CHECKSUM(*)和CHECKSUM_AGG作为哈希函数。也许你可以添加一个持久的计算列。
另外一种更好的方法就是创建一个覆盖所有列的唯一约束。这种方式可以更具性能,但你不需要处理由约束违规产生的异常
答案 1 :(得分:1)