我已经检查了好几次。列计数匹配,但我不断收到错误,说提取到语句与计数不匹配,
CREATE PROCEDURE [dbo].[SPXMLCSA]
(
@CounterStockMaster text,
@CounterStockDetails text
)
AS
DECLARE @M0 VARCHAR(100) --EditStatus
DECLARE @M1 VARCHAR(100) --Counter_Code
DECLARE @M2 VARCHAR(100) --Counter_Name
DECLARE @M3 VARCHAR(100) --To Branch_Code
DECLARE @D1 VARCHAR(100) --Project Type
DECLARE @D2 VARCHAR(100) --drpConter.Text
DECLARE @D3 VARCHAR(100) --grdGO.Rows[i].Cells["ItemCode"].Value
DECLARE @D4 VARCHAR(100) --grdGO.Rows[i].Cells["Qty"].Value
DECLARE @D5 VARCHAR(100) --Counter_Stock_Date
DECLARE @UomCode varchar(100) -- UOM CODE
DECLARE @NoOfUnits varchar(100) -- NO OF UINTS
DECLARE @UomSrate varchar(100) -- UOM PRATE
DECLARE @UomName varchar(100) -- UOM NAME
DECLARE @UomQty varchar(100) -- UOM QUANTITY
BEGIN
DECLARE @CNTNo int
DECLARE @idoc int
DECLARE @INDate Datetime
DECLARE @Branch_Code NUMERIC(18,0)
DECLARE @ItemCode NUMERIC(18,0)
DECLARE @ItemQty NUMERIC(18,3)
DECLARE @PurRate NUMERIC(18,2)
DECLARE @SaleRate NUMERIC(18,2)
DECLARE @MRP NUMERIC(18,2)
DECLARE @PurDate DATETIME
DECLARE @Batch_No VARCHAR(50)
DECLARE @ExpiryDate DATETIME
DECLARE @MultiMRP BIT
BEGIN TRANSACTION
SET DATEFORMAT dmy
SET @MultiMRP = (Select ISNULL(Multiple_Mrp,0) from [Company])
--===================================================================================================================
--@GOMaster
--===================================================================================================================
EXEC sp_xml_preparedocument @idoc OUTPUT, @CounterStockMaster
DECLARE GINMasterCursor CURSOR FOR
SELECT * FROM OPENXML (@idoc, '/CSMASTER/ID',1)
WITH (M0 VARCHAR(100), M1 VARCHAR(100), M2 VARCHAR(100),M3 VARCHAR(100))
OPEN GINMasterCursor
FETCH NEXT FROM GINMasterCursor INTO @M0,@M1,@M2,@M3
IF @M0='T' ---Edit Mode TRUE
BEGIN --- Reversing the Item Stock for the Editing Sales START
SET @CNTNo = @M1
DECLARE GInDetailCursor CURSOR FOR
SELECT Counter_Stock_Code,Item_Code,Item_Qty,Branch_Code From [Counter Stock Details]
WHERE Counter_Stock_Code = @CNTNo AND Branch_Code=@M3
OPEN GInDetailCursor
FETCH NEXT FROM GInDetailCursor INTO @CNTNo,@ItemCode,@ItemQty,@Branch_Code
WHILE @@FETCH_STATUS=0
BEGIN
IF @MultiMRP = 0
UPDATE [ITEM MASTER] SET ITEM_BAL = ITEM_BAL - @ItemQty , Transfer_flag=2, Ascend_flag=1 WHERE Item_Code = @ItemCode and Type_Code = 0 and Branch_Code = @M3
ELSE
UPDATE [ITEM MASTER] SET ITEM_BAL = ITEM_BAL - @ItemQty , Transfer_flag=2, Ascend_flag=1 WHERE Item_Code = @ItemCode and Item_MRP = @MRP and Type_Code = 0 and Branch_Code = @M3
FETCH NEXT FROM GInDetailCursor INTO @CNTNo,@ItemCode,@ItemQty,@PurRate,@SaleRate,@MRP,@PurDate,@Branch_Code,@Batch_No,@ExpiryDate
END
CLOSE GInDetailCursor
DEALLOCATE GInDetailCursor
DELETE [Counter Stock Master] WHERE Counter_Stock_Code=@CNTNo
DELETE [Counter Stock Details] WHERE Counter_Stock_Code=@CNTNo
END --- Reversing the Item Stock for the Editing GO END
ELSE
BEGIN
SET @CNTNo = (SELECT ISNULL(MAX(Counter_Stock_Code)+1,1) FROM [Counter Stock Master] where Branch_Code = @M3)
END
INSERT INTO [Counter Stock Master]
(Counter_Stock_Code,Counter_Stock_Date,Branch_Code)
VALUES
(@CNTNo, @D5, @M3)
CLOSE GINMasterCursor
DEALLOCATE GINMasterCursor
EXEC sp_xml_removedocument @idoc
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @CounterStockDetails
-- Execute a SELECT statement using OPENXML rowset provider.
DECLARE GInDetailsCursor CURSOR FOR
SELECT * FROM OPENXML (@idoc, '/CSDETAILS/ID',1)
WITH ( D1 VARCHAR(100), D2 VARCHAR(100), D3 VARCHAR(100), D4 VARCHAR(100))
OPEN GInDetailsCursor
FETCH NEXT FROM GInDetailsCursor INTO @D1,@D2,@D3,@D4
WHILE @@FETCH_STATUS = 0
BEGIN
IF @D1='A' or @D1='D' --For ProjectType ==> Departmental Stores
BEGIN
INSERT INTO [Counter Stock Details]
(Counter_Stock_Code,Item_Code,Item_Qty,Branch_Code)
VALUES
(@D2, @D3, @D4, @M3)
IF @MultiMRP = 0
UPDATE [ITEM MASTER] SET ITEM_BAL = ITEM_BAL + @D4 , Transfer_flag=2, Ascend_flag=1 WHERE Item_Code = @D3 and Type_Code = 0 and Branch_Code = @M3
ELSE
UPDATE [ITEM MASTER] SET ITEM_BAL = ITEM_BAL + @D4 , Transfer_flag=2, Ascend_flag=1 WHERE Item_Code = @D3 and Type_Code = 0 and Branch_Code = @M3
END
FETCH NEXT FROM GInDetailsCursor INTO @D1,@D2,@D3,@D4
END
CLOSE GInDetailsCursor
DEALLOCATE GInDetailsCursor
EXEC sp_xml_removedocument @idoc
SELECT @CNTNo
COMMIT TRANSACTION
END
GO
错误:游标提取:INTO列表中声明的变量数必须与所选列的变量数匹配。
从 GInDetailCursor 获取的第二个似乎与游标定义不匹配。
FETCH NEXT FROM GInDetailCursor INTO @CNTNo,@ItemCode,@ItemQty,@PurRate,@SaleRate,@MRP,@PurDate,@Branch_Code,@Batch_No,@ExpiryDate