Внутреннее объединение и обновление с SQL Server & amp; Переполнение стека

Я пытаюсь обновить две таблицы (ТРЕБОВАНИЕ & 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');
?>

1

Решение

Вы не можете обновить несколько таблиц внутри одного 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
0

Другие решения

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
1

я думаю, что ваше обновление заявление дает ошибку

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
0

Измените эту строку:

" ... WHERE RequestId = '$_GET[RequestId]'";

Для того, чтобы:

" ... WHERE RequestId = $_GET[RequestId]";
0
По вопросам рекламы [email protected]