0
我有3個表作爲測試1,測試2和測試3.觸發不會更新所有受影響的行
測試1,是一個銷售表。銷售詳情記錄在哪裏。它會生成一個銷售ID。
測試2,是用於記錄在此特定銷售ID中銷售的所有產品的表格。我使用openxml來插入這些細節。請在下面找到用於更新測試1和測試2表的存儲過程。
CREATE PROCEDURE UpdateSales
(
@SalesID int out,
@SalesDate Date,
@XmlString text
)
AS
BEGIN
SET NOCOUNT ON
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Test1 (SalesDate) VALUES (@SalesDate);
SET @SalesID = SCOPE_IDENTITY();
DECLARE @XMLDocPointer int;
EXEC sp_xml_preparedocument @XMLDocPointer OUTPUT, @XmlString;
INSERT INTO Test2 (SalesID, ProductId, ProductName, qty)
SELECT @SalesID, productId, productName, qty
FROM OPENXML(@XmlDocPointer, '/Root/Products', 2)
WITH (productId int,
productName varchar(100),
qty int);
EXEC sp_xml_removedocument @XMLDocPointer
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH
END
GO
表3是產品表。根據已售出的產品數量需要更新。我在插入後在測試2表上使用觸發器。請在下面找到使用的觸發器。
CREATE TRIGGER updateQty ON Test2
AFTER INSERT
AS
DECLARE @productID int;
DECLARE @qty int;
SELECT @productID = ProductId FROM INSERTED;
SELECT @qty = qty FROM INSERTED;
DECLARE @currentQty int;
SELECT @currentQty = qty FROM Test3 WHERE productID = @productID;
UPDATE Test3 SET qty = @currentQty - @qty WHERE productID = @productID;
GO
當我試圖執行存儲過程插入記錄到測試1和測試2表,因爲測試3表需要更新,因爲我有一個觸發器。請在下面找到我使用的執行語句,只有產品ID 1在測試3表中更新。請幫我解決這個問題。 tanx提前。
聲明已執行。
EXEC UpdateSales
'1' , '08/08/2012' ,
'
<Root>
<Products>
<productId>1</productId>
<productName>Product 1</productName>
<qty>1</qty>
</Products>
<Products>
<productId>2</productId>
<productName>Product 2</productName>
<qty>2</qty>
</Products>
<Products>
<productId>3</productId>
<productName>Product 3</productName>
<qty>3</qty>
</Products>
</Root>
'
GO