我有2张桌子
MasterStock table
CID | StockAvailable |
1 | 15 |
2 | 5 |
MasterPackage table
PID | CID | StockPackage |
1 | 1 | 20 |
1 | 2 | 2 |
我想创建一个存储过程,根据masterpackage表上的stockpackage检查masterstock表上的可用库存。
我想实现它,单一查询。
PID的MasterPackage表将自动插入Trans Table。
Trans table
TID | PID | CID | StockIssue |
如果StockAvailable> = StockPackage,INSERT状态为True
如果StockAvailable< StockPackage,INSERT状态为假
StockPackage as Stock Issue
请帮忙。
答案 0 :(得分:1)
在CID上执行INNER JOIN
INSERT INTO Trans (PID, SID, StockIssue)
SELECT p.PID, p.SID, p.StockPackage AS StockIssue
FROM MasterPackage AS p
INNER JOIN MasterStock AS s
ON s.CID = p.CID
WHERE s.StockAvailable >= p.StockPackage
答案 1 :(得分:1)
我不确定为什么你需要这里的存储过程,因为你可以在一个简单的查询中完成它,但这是你要求的:
StockIssue
如果BIT
为'True'
数据类型,则将1
替换为'False'
,将0
替换为CREATE FUNCTION CheckAvailability
(
@MasterStock INT,
@StockPackage INT
)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE
@Result VARCHAR(50)
SET
@Result =
CASE
WHEN @MasterStock >= @StockPackage THEN 'True'
WHEN @MasterStock < @StockPackage THEN 'False'
END
RETURN @Result
END
。
如果您要定期将其与其他表或列一起使用,那么您可以定义一个标量函数来比较两列之间的值,这是一个通用的解决方案,可以提供更大的灵活性(让你的生活更轻松)。
类似的东西:
SELECT
MP.PID,
MP.CID,
dbo.CheckAvailability(MS.StockAvailable, MP.StockPackage) AS StockIssue
FROM MasterPackage MP
LEFT JOIN MasterStock MS ON MS.CID = MP.PID
然后叫它:
app.js
您可以在任何您想要的地方使用它。