USE [Retailers]
GO
/****** Object: StoredProcedure [dbo].[Proc_Orders_Add] Script Date: 03/31/2017 16:38:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
---新增订单
ALTER PROC [dbo].[Proc_Orders_Add]
(
@Admin_ID INT,
@Orders_Date DATETIME,
@Orders_Price DECIMAL(8),
@Freight DECIMAL(8),
@All_Total DECIMAL(8),
@Orders_State INT,
@Express_State INT,
@Customer_ID INT,
@Consignee_Name VARCHAR(20),
@Consignee_Phone VARCHAR(11),
@Express_ID INT,
@Consignee_Tel VARCHAR(11),
@Consignee_Address VARCHAR(50),
@Province_Num INT,
@City_Num INT,
@Area_Num INT,
@Consignee_Market VARCHAR(200),
@xml XML,
@xml1 XML
)
AS
BEGIN TRY
BEGIN TRAN--开始执行事务
--添加主表数据
BEGIN
DECLARE @IdentityId INT,@Pointer INT,@Pointer1 INT--声明变量
INSERT INTO Orders(Admin_ID,Customer_ID,Express_ID,Orders_Date,Orders_Price,Freight,All_Total,Orders_State,Express_State)
VALUES(@Admin_ID,@Customer_ID,@Express_ID,Convert(datetime,@Orders_Date,120),@Orders_Price,@Freight,@All_Total,@Orders_State,@Express_State)
SET @IdentityId=@@IDENTITY;--获取主表中的自增列
INSERT INTO Consignee(Orders_ID,Customer_ID,Consignee_Name,Consignee_Phone,Province_Num,City_Num,Area_Num,Consignee_Address,Consignee_Tel,Consignee_Market)
VALUES(@IdentityId,@Customer_ID,@Consignee_Name,@Consignee_Phone,@Province_Num,@City_Num,@Area_Num,@Consignee_Address,@Consignee_Tel,@Consignee_Market)
END
BEGIN
CREATE TABLE #OrdersSub--创建销售订单临时表
(
Orders_ID INT,
Goods_ID INT,
Goods_Number INT,
Discount DECIMAL(8),
Real_Collection DECIMAL(8),
OrdersSub_Date DATETIME
)
CREATE TABLE #Stock--创建修改预定量临时表
(
Stock_ID INT,
Stock_Total INT
)
END
EXECUTE sp_xml_preparedocument @pointer output,@xml
INSERT INTO #OrdersSub(Goods_ID,Goods_Number,Discount,Real_Collection,OrdersSub_Date)
SELECT Goods_ID,Goods_Number,Discount,Real_Collection,OrdersSub_Date
FROM OPENXML(@pointer,'/ss/cc')
WITH
(
Goods_ID INT,
Goods_Number INT,
Discount DECIMAL(8),
Real_Collection DECIMAL(8),
OrdersSub_Date DATETIME
)
UPDATE #OrdersSub SET Orders_ID=@IdentityId--修改临时表中的外键
INSERT INTO OrdersSub(Orders_ID,Goods_ID,Goods_Number,Discount,Real_Collection,OrdersSub_Date)
SELECT Orders_ID,Goods_ID,Goods_Number,Discount,Real_Collection,OrdersSub_Date
FROM #OrdersSub
EXECUTE sp_xml_preparedocument @pointer1 output,@xml1
INSERT INTO #Stock(Stock_ID,Stock_Total)
SELECT Stock_ID,Stock_Total
FROM OPENXML(@Pointer1,'/ss/cc')
WITH
(
Stock_ID INT,
Stock_Total INT
)
DECLARE @Stock_ID int,@Stock_Total int
Declare Mycursor Cursor FOR SELECT Stock_ID,Stock_Total FROM #Stock
--打开游标
Open Mycursor
Fetch next from Mycursor into @Stock_ID ,@Stock_Total
while @@FETCH_STATUS=0
begin
update Stock set Stock_Total=(CONVERT(Int,(SELECT Stock_Total FROM Stock WHERE Stock_ID=@Stock_ID))+CONVERT(int,@Stock_Total))
WHERE Stock_ID=@Stock_ID
fetch next from Mycursor into @Stock_ID,@Stock_Total--转到下一条游标,没有就会死循环
end
CLOSE Mycursor --关闭游标
DEALLOCATE Mycursor--释放游标
IF(@@ERROR<>0) --判断以上操作是否执行完毕
BEGIN
rollback tran --回滚
return 0
END
ELSE
BEGIN
commit tran --提交
return 1
END
END TRY
BEGIN CATCH
DECLARE @Mes VARCHAR(2000)=ERROR_MESSAGE()--定义错误信息
rollback tran --回滚
return 0
PRINT(@Mes)
END CATCH