Я пытаюсь обновить две таблицы (ТРЕБОВАНИЕ & 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
заявление. Единственный способ сделать это — выполнить два отдельных 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
Update from
синтаксис неверен. Это должно быть что-то вроде этого. Вы не можете сделать два обновления в одном утверждении. Необходимо сохранять оператор обновления в одной транзакции и фиксировать изменения только тогда, когда оба обновления выполнены успешно.
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
я думаю, что ваше обновление заявление дает ошибку
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
Измените эту строку:
" ... WHERE RequestId = '$_GET[RequestId]'";
Для того, чтобы:
" ... WHERE RequestId = $_GET[RequestId]";