我有一个跟踪器表,用于跟踪与我们的客户相关联的特定数字,称为“跟踪器”。该表如下所示:
customer_id value date_of_value
11111 2 2020-12-14
23332 6 2021-01-15
此表从另一个名为“值”的表中获取此信息,该表与上述表完全相同,但没有 date_of_value 列。 该表每天都在不断更新,与客户关联的价值会被新的价值覆盖。 我希望能够做的是创建一个小作业,以便“跟踪器”表查看“值”表以查看值是否已更新。如果是这样,我想在“跟踪器”表中插入一个新行,其中包含客户的 ID、新值和值更改的日期。 在我看来,查询看起来像这样:
CASE WHEN Tracker.value != Values.value
THEN INSERT INTO Tracker (customer_id, value, date_of_value)
VALUES (Values.id, values.value, GETDATE())
我尝试将它与 UPDATE 语句一起使用,但它们都不起作用。 理想情况下,“跟踪器”表将如下所示:
customerr_id value date_of_value
11111 2 2020-12-14
2332 6 2021-01-15
11111 3 2021-01-22
2332 8 2021-01-24
如何设置此查询,以便在创建作业时插入带有更新信息的新行?当我尝试使用 UPDATE 方法时,它覆盖了“Tracker”表中的信息。
答案 0 :(得分:2)
嗯。 . .您需要 np.seterr(all='raise')
noise = np.random.normal(0,2,9*9).reshape(9,9)
noise = np.around(noise,out=noise)
noise = noise.astype(np.uint16,copy=True)
signal = np.zeros((9,9), dtype=np.uint16)
try:
signal += noise
except FloatingPointError:
print("Overflow Detected")
# Handle overflows
print(test)
表中的最新值。然后将其与现有值进行比较并在存在差异的地方插入:
>>> np.int16(32000) * np.int16(3)
---------------------------------------------------------------------------
FloatingPointError Traceback (most recent call last)
<ipython-input-84-5e468485740e> in <module>
----> 1 np.int16(32000) * np.int16(3)
答案 1 :(得分:0)
我们可以在主表上创建一个触发器来向跟踪器表中插入一个新行:
CREATE TRIGGER trg_Tracking
ON MainTable
AFTER INSERT, UPDATE AS
IF (NOT UPDATE(value) OR NOT EXISTS
(SELECT customer_id, value FROM inserted
EXCEPT
SELECT customer_id, value FROM deleted))
RETURN; -- early bail-out if we can
INSERT Tracker (customerr_id, value, date_of_value)
SELECT customer_id, value, GETDATE()
FROM (
SELECT customer_id, value FROM inserted
EXCEPT --make sure to compare inserted and deleted values (AFTER INSERT has empty deleted values)
SELECT customer_id, value FROM deleted
) changed;
GO -- No BEGIN and END as the whole batch is the trigger