簡體   English   中英

使用SQL Server和PHP進行內部聯接和更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM