定期从另一个数据库中的多个表更新一个数据库中的表

时间:2019-04-25 04:59:44

标签: sql sql-server tsql

我在SQL Server中有2个数据库,DB1有多个表,并且某些表会不断用新记录更新。 DB2只有1个表,其中应包含DB1中多个表的所有组合信息,并且需要每2小时更新一次。

例如,DB1有3个表:“ ProductInfo”,“ StationRecord”,“ StationInfo”。前两个表都有一个timestamp列,该列指示何时创建记录(即,两个表是异步更新的,仅当产品通过“ StationRecord”中的所有站时,“ ProductInfo”才会被新产品更新),并且最后一张桌子是固定的。

这些表格如下:

None

DB2只有1个表,其中包含“ ProductID”和“ StationID”的组合PK,如下所示:

get

我弄清楚了定时部分,该部分将用于创建具有一些预定时间表的作业,而该作业将执行存储过程。问题在于如何正确编写存储过程,该存储过程必须执行以下操作:

  1. 等待最后一个产品通过所有工作站(并且“ stationInfo”表已完全更新)
  2. 在DB1的表中查找在此循环中生成的所有NEW记录
  3. 合并DB1中3个表的信息
  4. 将合并的信息插入DB2.BOMHistory

这是我的代码:

USE DB1
GO

CREATE TABLE ProductInfo 
ProductID bigint Primary Key NOT NULL
TimeCreated datetime    
ProductName nvarchar(255)

CREATE TABLE StationRecord 
RecordID bigint Primary Key NOT NULL
TimeCreated datetime      
ProductID bigint NOT NULL
StationID bigint

CREATE TABLE StationInfo
StationID bigint Primary Key NOT NULL
BOM_used nvarchar(255)

INSERT语句中的条件不起作用,请提供一些建议。

此外,我应该为此应用程序使用表变量还是临时表?

1 个答案:

答案 0 :(得分:0)

尝试:

INSERT INTO DB2.BOMHistory(ProductID, ProductCreated, StationID, BOM_used)
SELECT DISTINCT tb.ProductID, tb.ProductCreated, tb.StationID, tb.BOM_used
FROM #temp_BOMList tb
WHERE NOT EXISTS
(SELECT * FROM DB2.BOMHistory WHERE ProductID = tb.ProductID AND StationID = tb.StationID)