У меня есть 2 базы данных в SQL Server, DB1 имеет несколько таблиц, и некоторые таблицы постоянно обновляются новыми записями.В DB2 есть только 1 таблица, которая должна содержать всю объединенную информацию из нескольких таблиц в DB1 и должна обновляться каждые 2 часа.
Например, в DB1 есть 3 таблицы: "ProductInfo", "StationRecord","StationInfo".У первых двух таблиц есть столбец отметки времени, который указывает, когда создается запись (т.е. две таблицы обновляются асинхронно, ТОЛЬКО когда продукт проходит все станции в «StationRecord», будет ли «ProductInfo» обновляться новым продуктом), ипоследняя таблица является фиксированной.
Таблицы следующие:
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)
В DB2 есть только 1 таблица, содержащая составной PK "ProductID" и "StationID", как показано ниже:
CREATE TABLE DB2.BOMHistory AS
SELECT
DB1.ProductInfo.ProductID
DB1.ProductInfo.TimeCreated AS ProductCreated
DB1.StationInfo.StationID
DB1.StationInfo.BOM_used
FROM DB1.ProductInfo
JOIN DB1.StationRecord
ON DB1.ProductInfo.ProductID = DB1.StationRecord.ProductID
JOIN DB1.StationInfo
ON DB1.StationRecord.StationID = DB1.StationInfo.StationID
constraint PK_BOMHistory Primary Key (ProductID,StationID)
Я вычислил временную часть, которая должна использовать создание задания с некоторыми заранее установленными расписаниями, и задание заключается в выполнении хранимой процедуры.Проблема заключается в том, как правильно написать хранимую процедуру, которая должна выполнять следующие действия:
- ждать, пока последний продукт пройдет все станции (и таблица «stationInfo» обновится полностью)
- найти все НОВЫЕ записи, сгенерированные в этом цикле, в таблицах в DB1
- объединить информацию из 3 таблиц в DB1
- вставить объединенную информацию в DB2.BOMHistory
Вот мой код:
ALTER Procedure BOMHistory_Proc
BEGIN
SELECT
DB1.ProductInfo.ProductID,
DB1.ProductInfo.TimeCreated AS ProductCreated
DB1.StationInfo.StationID,
DB1.StationInfo.BOM_used
into #temp_BOMList
FROM DB1.ProductInfo
JOIN DB1.StationRecord
ON DB1.ProductInfo.ProductID = DB1.StationRecord.ProductID
JOIN DB1.StationInfo
ON DB1.StationRecord.StationID = DB1.StationInfo.StationID
ORDER BY ProductInfo.ProductID
END
SELECT * from #temp_BOMList
INSERT INTO DB2.BOMHistory(ProductID, ProductCreated, StationID, BOM_used)
SELECT DISTINCT (ProductID, stationID)
FROM #temp_BOMList
WHERE (ProductID, stationID) NOT IN (SELECT ProductID, stationID FROM DB2.BOMHistory)
Условие в операторе INSERT не работает, пожалуйста, дайте несколько советов.
Кроме того, я должен использовать переменную таблицы или временную таблицу для этого приложения?