EXECUTE 后的事务计数指出缺少了 COMMIT 或 ROLLBACK TRANSACTION 语句。原计数 = 0,当前计数 = 1
下面的存储过程哪儿有问题:
望大虾们指点.
CREATE PROCEDURE dbo.spOrdersInsert
(
@CustomerID INT,
@CartID VARCHAR(50),
@Memo VARCHAR(2000),
@OrderID INT OUTPUT
)
AS
-- 确保数据的一致性, 因而起用事务
BEGIN TRAN OrdersInsert
/* 产生订单 */
INSERT INTO Orders
(
CustomerID,
Memo
)
VALUES
(
@CustomerID,
@Memo
)
-- 返回当前所产生的OrderID
SELECT
@OrderID = @@Identity
/* 将当前用户的当前购物车COPY到当前所产生的ORDER明细中*/
INSERT INTO OrderDetails
(
OrderID,
ProductID,
Quantity,
UnitCost
)
SELECT
@OrderID,
ShoppingCart.ProductID,
Quantity,
Products.UnitCost
FROM
ShoppingCart
INNER JOIN Products ON ShoppingCart.ProductID = Products.ProductID
WHERE
CartID = @CartID
/* 完成后, 清空当前购物车ID的所有明细*/
EXEC spShoppingCartEmpty @CartId
COMMIT TRAN OrdersInsert
GO
------解决方案--------------------下面的存储过程哪儿有问题:
望大虾们指点.
CREATE PROCEDURE dbo.spOrdersInsert
(
@CustomerID INT,
@CartID VARCHAR(50),
@MemoVARCHAR(2000),/*少空格*/
@OrderID INT OUTPUT
)
AS
-- 确保数据的一致性, 因而起用事务
BEGIN TRAN
/* 产生订单 */
INSERT INTO Orders
(
CustomerID,
Memo
)
VALUES
(
@CustomerID,
@Memo /* 这个参数从哪里来的 */
)
-- 返回当前所产生的OrderID
SELECT
@OrderID = @@Identity /* 这句不起作用,因为没有标示字段增加 */
/* 将当前用户的当前购物车COPY到当前所产生的ORDER明细中*/
INSERT INTO OrderDetails
(
OrderID,
ProductID,
Quantity,
UnitCost
)/* Values部分呢? */
/* 这个选择也没有任何作用 */
SELECT
@OrderID,
ShoppingCart.ProductID,
Quantity,
Products.UnitCost
FROM
ShoppingCart
INNER JOIN Products ON ShoppingCart.ProductID = Products.ProductID
WHERE
CartID = @CartID
/* 完成后, 清空当前购物车ID的所有明细*/
EXEC spShoppingCartEmpty @CartId
COMMIT TRAN OrdersInsert/* 直接Commit就可以了 */
GO