我正在尝试从一个表(MasterData)创建记录并将新的(多条记录)插入到 MS SQL Server 中的另一个表(订单)中。
最初我一直在考虑使用游标(在存储过程中),但我有点不确定是否可以只使用 select into 语句?
我添加了一些代码来生成这两个表(输入表 = MasterData,输出表 = Orders)。此外,我在输入表中添加了几个示例数据记录。
CREATE TABLE MasterData (
ItemId VARCHAR(30) NOT NULL,
ItemDescription VARCHAR(30) NOT NULL,
Minimum INT NOT NULL,
ROP INT NOT NULL,
Maximum INT NOT NULL,
Multiple INT NOT NULL,
InventoryPosition INT NOT NULL,
[Location] VARCHAR(30),
);
INSERT INTO MasterData (ItemId, ItemDescription, Minimum, ROP, Maximum, Multiple, InventoryPosition, Location)
VALUES ('Item001', 'Item Description 001', 10, 15, 40, 5, 16, 'DC01'),
('Item002', 'Item Description 002', 20, 30, 50, 10, 29, 'DC02'),
('Item003', 'Item Description 003', 30, 33, 50, 0, 10, 'DC01');
CREATE TABLE Orders (
ItemId VARCHAR(30) NOT NULL,
ItemDescription VARCHAR(30) NOT NULL,
InventoryStart INT NOT NULL,
InventoryEnd INT NOT NULL,
Quantity INT NOT NULL,
Location VARCHAR(30) NOT NULL,
Classification VARCHAR(30) NOT NULL,);
存储过程应生成到表“订单”中的输出将是以下结果:
INSERT INTO Orders (ItemId, ItemDescription, InventoryStart, InventoryEnd, Quantity, Location, Classification)
VALUES ('Item002', 'Item Description 001', 29, 39, 10, 'DC02', 'Under ROP'),
('Item002', 'Item Description 002', 39, 49, 10, 'DC02', 'Under Max'),
('Item002', 'Item Description 002', 49, 59, 10, 'DC02', 'Above Max'),
('Item003', 'Item Description 003', 10, 20, 10, 'DC01', 'Under Min'),
('Item003', 'Item Description 003', 20, 33, 13, 'DC01', 'Under ROP'),
('Item003', 'Item Description 003', 33, 50, 17, 'DC01', 'Under Max');
应该应用的算法具有以下流程:
如果 MasterData 中的记录的“InventoryPosition”值低于“ROP”,则应在表中创建新记录:订单。否则 MasterData 中的记录应该被跳过并且逻辑应该迭代到下一个记录。
如果上述情况属实,则应创建新记录,直到 InventoryEnd 高于最大值。
InventoryStart 用于 Orders 表中的第一条记录(在 ItemId 内),它等于 MasterData 中的 InventoryPosition。InventoryEnd 将等于 InventoryStart + Multiple。从这里开始 InventoryStart(记录 2 和更高)将等于 InventoryEnd(来自记录 1)。基本上是一种运行总数。
层次结构是:
- 最小值为最小值
- 机械手
- 最大限度
并生成输出表中的行,直到InventoryEnd达到或等于 MAX。
任何人都对生成输出记录的 select into 语句有一个好主意吗?