[英]Inner Join and Update with SQL Server & PHP
我正在嘗試更新兩個表(REQUISITION&STOCK)並通過使用SQL Server上的內部聯接從兩個表中減去兩列。 我已經嘗試過了,但沒有成功。
<?php
$tsql = "UPDATE [MRS].[dbo].[REQUISITION] A
INNER JOIN [MRS].[dbo].[STOCK] B
ON B.StockId = A.StockId
SET A.RequestStatus = 'APPROVED',
A.ApprovedDate = CONVERT(VARCHAR(10),
GETDATE(),103),
B.StockQuantity = B.StockQuantity - A.RequestQuantity
WHERE RequestId = '$_GET[RequestId]'";
$result = sqlsrv_query($conn, $tsql, array(),
array ("Scrollable" => SQLSRV_CURSOR_KEYSET));
header('Location:approval.php');
?>
Update from
語法Update from
是錯誤的。 應該是這樣的。 您不能在單個語句中進行兩次更新。 需要將update語句保留在單個事務中,並且僅在兩個更新都成功時才提交更改
Begin TRAN
UPDATE A
SET A.RequestStatus = 'APPROVED',
A.ApprovedDate = CONVERT(VARCHAR(10), Getdate(), 103)
FROM [MRS].[dbo].[REQUISITION] A
INNER JOIN [MRS].[dbo].[STOCK] B
ON B.StockId = A.StockId
WHERE RequestId = $_GET[RequestId]
UPDATE B
SET B.StockQuantity = B.StockQuantity - A.RequestQuantity
FROM [MRS].[dbo].[REQUISITION] A
INNER JOIN [MRS].[dbo].[STOCK] B
ON B.StockId = A.StockId
WHERE RequestId = $_GET[RequestId]
COMMIT
更改此行:
" ... WHERE RequestId = '$_GET[RequestId]'";
至:
" ... WHERE RequestId = $_GET[RequestId]";
我認為您的更新聲明有誤
UPDATE A SET A.RequestStatus = 'APPROVED',
A.ApprovedDate = CONVERT(VARCHAR(10),GETDATE(),103),
A.StockQuantity = B.StockQuantity - A.RequestQuantity
from [MRS].[dbo].[STOCK] B
JOIN [MRS].[dbo].[REQUISITION] A
ON B.StockId = A.StockId
WHERE RequestId=Your_request_ID
您不能在單個UPDATE
語句中更新多個表。 唯一的方法是在單個事務中執行兩個單獨的UPDATE
語句
BEGIN TRANSACTION
UPDATE A
SET A.RequestStatus = 'APPROVED',
A.ApprovedDate = CONVERT(VARCHAR(10), GETDATE(),103)
FROM [MRS].[dbo].[REQUISITION] A
WHERE RequestId = $_GET[RequestId]
UPDATE B
SET B.StockQuantity = B.StockQuantity - A.RequestQuantity
FROM [MRS].[dbo].[REQUISITION] A
INNER JOIN [MRS].[dbo].[STOCK] B ON B.StockId = A.StockId
WHERE RequestId = $_GET[RequestId]
COMMIT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.