gpt4 book ai didi

c# - 如何判断数据库中的记录是否被两个任务修改

转载 作者:行者123 更新时间:2023-11-30 22:24:06 25 4
gpt4 key购买 nike

不确定这是否属于 SO 或他们的其他网站之一,如果我应该移动它,请告诉我。

这是我正在使用的内容:
它是一个非常古老的电子商务系统,其中有一张产品表。此产品表每晚通过 Windows 任务计划程序由两个文件更新。一个文件包含产品信息(名称、描述、颜色、制造商等),另一个文件包含定价、可用库存、仓库位置等信息。解析这些文件和更新数据库中的产品的过程需要几个小时。我无法控制这两个文件。

我需要一种方法来确定这两个文件是否更新了数据库中的产品。我只能向拥有来自这两个文件的信息的用户展示产品。如果产品只更新了一个,则视为不完整,无法展示。

截至目前,我正在考虑添加一个触发器以添加/更新到 count+1 并在每次两个任务中的任何一个修改记录/产品时保存到新列。然后执行另一个任务来检查该列是否等于 2 并执行显示或隐藏所需的操作。但我希望那里可能还有一些其他的想法?

最佳答案

为了不必担心遗留流程的完整回归测试,我会选择使用触发器将 Product 表上的更新记录到第二个表中。

触发器可以通过检查更新的列来确定正在运行的进程。然后我会创建一个简单的查询来返回所有已被两个进程更新的产品。

/* Test tables */
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Product')
DROP TABLE Product

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'ProductChangeLog')
DROP TABLE ProductChangeLog
GO

CREATE TABLE Product (
ProductID INT NOT NULL PRIMARY KEY,
ProductName VARCHAR(50) NOT NULL,
ProductDescription VARCHAR(100) NOT NULL,
ProductPrice MONEY NOT NULL,
ProductAvailQty INT NOT NULL
)

CREATE TABLE ProductChangeLog (
ChangeLogID INT NOT NULL IDENTITY(1,1),
ProductID INT NOT NULL,
ChangeTime DATETIME NOT NULL,
ChangeType VARCHAR(50) NOT NULL,
)
GO

CREATE TRIGGER tr_Product ON Product
FOR UPDATE
AS

INSERT ProductChangeLog (ProductID, ChangeTime, ChangeType)
SELECT
ProductID,
GETDATE(),
-- Log the process which was run depending on columns modified
CASE WHEN UPDATE(ProductName) OR UPDATE(ProductDescription)
THEN 'Process1'
WHEN UPDATE(ProductPrice) OR UPDATE(ProductAvailQty)
THEN 'Process2'
ELSE 'Neither'
END
FROM inserted
GO

INSERT Product
SELECT 1, 'Blue V-Neck', 'Sweater', 25.00, 100 UNION ALL
SELECT 2, 'Green V-Neck', 'Sweater', 30.00, 200 UNION ALL
SELECT 3, 'Black crew', 'T-Shirt', 10.00, 45

/* Change two products in first process */
UPDATE Product
SET ProductDescription = 'Men''s Sweater'
WHERE ProductDescription = 'Sweater'

/* Change three products in second process */
UPDATE Product
SET ProductPrice = ProductPrice + 10

/* See all changes */
SELECT *
FROM ProductChangeLog

DECLARE @today DATETIME
SET @today = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))

/* See all products changed today by both processes */
SELECT *
FROM Product p
WHERE EXISTS (
SELECT *
FROM ProductChangeLog
WHERE ChangeType = 'Process1'
AND ChangeTime > @today
AND ProductID = p.ProductID
)
AND EXISTS (
SELECT *
FROM ProductChangeLog
WHERE ChangeType = 'Process2'
AND ChangeTime > @today
AND ProductID = p.ProductID
)

*在 SQL Server 2005 中测试

关于c# - 如何判断数据库中的记录是否被两个任务修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com