如何使用sql游标更新sql server数据库中的数据?

阿卜杜勒·哈米德|

我正在尝试开发一个库存管理系统。但是问题是,当我要在库存表中进行库存时,这些产品数量需要一次在项目表中更新。例如,当我按下保存按钮时,我要增加库存表中100种产品的库存,其中所有状态为'Posting'的产品将根据项目代码更新为tbl_item.quantity + tbl_stock.qty 。请帮我...

这是我要增加库存的桌子。

CREATE TABLE [dbo].[tbl_Addstock](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [ItemCode] [varchar](50) NOT NULL,
    [ItemName] [varchar](250) NOT NULL,
    [qty] [decimal](18, 2) NOT NULL,
    [sdate] [date] NOT NULL,
    [sadmin] [varchar](50) NOT NULL,
    [Status] [varchar](50) NULL,
 CONSTRAINT [PK_tbl_Addstock] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] 

这是我要更新总库存信息的另一个项目表。

CREATE TABLE [dbo].[tbl_Item](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](50) NOT NULL,
    [batchno] [nvarchar](50) NOT NULL,
    [brand] [nvarchar](50) NOT NULL,
    [itemcode] [varchar](50) NOT NULL,
    [catg] [nvarchar](50) NOT NULL,
    [supplier] [nvarchar](50) NULL,
    [unitType] [nvarchar](50) NOT NULL,
    [Quantity] [decimal](18, 2) NULL,
    [buyingPrice] [money] NULL,
    [sellingPrice] [money] NULL,
    [qtyLimit] [int] NULL,
    [vat] [decimal](18, 2) NULL,
 CONSTRAINT [PK_tbl_Item] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] 

然后我尝试了一个游标查询。

USE [NMCPMC]
GO
/****** Object:  StoredProcedure [dbo].[sp_UpdateItem]    Script Date: 01/07/2015 12:41:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--exec sp_UpdateItem
ALTER PROCEDURE [dbo].[sp_UpdateItem] 
AS
BEGIN
SET NOCOUNT ON
DECLARE 
    @TEMP                        AS VARCHAR(50), @ItemCode varchar(20),
    @eqty decimal(18,2)

DECLARE ITEM_CURSOR CURSOR FOR
SELECT ItemCode,qty FROM tbl_Addstock 
OPEN ITEM_CURSOR
    FETCH NEXT FROM ITEM_CURSOR
INTO @ItemCode,@TEMP

WHILE (@@FETCH_STATUS = 0)
BEGIN
    --set @eqty = (select Quantity from tbl_Item)
 --   SELECT @TEMP = SUM(ti.Quantity+ta.qty) from tbl_Addstock ta inner join tbl_Item ti on ta.ItemCode=ti.itemcode
 --   UPDATE tbl_Item SET Quantity = @TEMP WHERE CURRENT OF ITEM_CURSOR
 if exists(select * from tbl_Addstock where ItemCode=@ItemCode)
  begin 
   UPDATE tbl_Addstock SET qty = qty+@TEMP WHERE ItemCode=@ItemCode
   update tbl_Addstock set qty=qty-@TEMP WHERE ItemCode=@ItemCode
  end
  else
  begin
--  insert into tbl_Addstock
  update tbl_Addstock set qty=qty-@TEMP WHERE ItemCode=@ItemCode 
  end
    print @ItemCode
    print @TEMP
    FETCH NEXT FROM ITEM_CURSOR
    INTO @ItemCode,@TEMP
END

CLOSE ITEM_CURSOR
DEALLOCATE ITEM_CURSOR

SET NOCOUNT OFF
END
--EXEC sp_UpdateItem 
史蒂夫

因此,您想将tbl_AddStock中表示的数量添加到tbl_Item中。您的SP似乎无法正常工作,因为您从未碰过表tbl_Item的数量字段。

我会写

ALTER PROCEDURE [dbo].[sp_UpdateItem] 
AS
BEGIN
SET NOCOUNT ON
DECLARE 
    @ItemCode varchar(20),
    @eqty decimal(18,2)

DECLARE ITEM_CURSOR CURSOR FOR
SELECT ItemCode,qty FROM tbl_Addstock WHERE Status = 'Posting'
OPEN ITEM_CURSOR
FETCH NEXT FROM ITEM_CURSOR
INTO @ItemCode,@eqty

WHILE (@@FETCH_STATUS = 0)
BEGIN
if exists(select * from tbl_Item where ItemCode=@ItemCode)
  begin 
   UPDATE tbl_Item     SET quantity = quantity + @eqty WHERE ItemCode=@ItemCode
   UPDATE tbl_Addstock SET qty = qty - @eqty, Status = 'Posted' WHERE ItemCode=@ItemCode
   -- COULD AVOID THE MATH. SIMPLY SET QTY=0
   -- ? UPDATE tbl_Addstock SET qty      = 0           WHERE ItemCode=@ItemCode
  end
else
  begin
   -- THIS ELSE PART IS WHERE YOU DISCOVER THAT tbl_Item 
   -- HAD NO RECORD FOR THE @ItemCode.
   -- YOU SHOULD ADD THE NEW ITEM TO THE tblItem TABLE
   -- BUT MANY FIELDS OF THAT TABLE ARE NOT NULL (batchno, catg, brand, unittype)
   -- SO YOU NEED TO KNOW THE VALUES FOR THESE
   -- FIELDS OTHERWISE YOU WONT BE ABLE TO ADD ANYTHING 
   -- ??? -> INSERT INTO tbl_Item(ItemCode, Qty) VALUES (@itemcode, @eqty)
  end
  FETCH NEXT FROM ITEM_CURSOR
  INTO @ItemCode,@qty
END
CLOSE ITEM_CURSOR
DEALLOCATE ITEM_CURSOR

SET NOCOUNT OFF
END

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据库中的SQL Server对象

来自分类Dev

在SQL Server中复制数据库

来自分类Dev

在SQL Server中收缩数据库

来自分类Dev

如何回滚SQL Server数据库中的数据?

来自分类Dev

如何使用SQL Server中的隐藏数据库对象?

来自分类Dev

更新SQL数据库中的数据

来自分类Dev

自动更新 SQL Server 数据库中的列

来自分类Dev

数据库备份中的元数据-SQL Server 2008

来自分类Dev

如何通过传递数据库名称访问WPF中的SQL Server数据库

来自分类Dev

SQL Server 2005如何从数据库转储中创建数据库

来自分类Dev

SQL Server数据库未更新

来自分类Dev

如何在SQL Server中创建数据库的别名

来自分类Dev

如何在SQL Server数据库中存储图像

来自分类Dev

如何找出谁在还原SQL Server中的数据库?

来自分类Dev

如何在SQL Server数据库中应用dtplyr

来自分类Dev

如何检测我的SQL Server数据库中的更改

来自分类Dev

在SQL Server中归档数据库表:是相同的数据库还是不同的数据库?

来自分类Dev

SQL server 的数据库是 sql 数据库吗?

来自分类Dev

如何使用Mirth从xml文件在SQL Server数据库中插入数据

来自分类Dev

如何使用WebMatrix中的Razor连接到SQL Server数据库并检索数据?

来自分类Dev

在RODBC中为SQL Server数据库更改默认数据库

来自分类Dev

如何使用SQL缩小SQL Server CE数据库

来自分类Dev

更新 SQL 数据库中的表

来自分类Dev

使用SqlDataAdapter更新SQL Server数据库

来自分类Dev

如何将Access数据库与SQL Server同步,在Access数据库中所做的更改应反映在SQL Server数据库中

来自分类Dev

如何将Access数据库与SQL Server同步,在Access数据库中所做的更改应反映在SQL Server数据库中

来自分类Dev

如何将数据从本地SQL Server数据库更新到联机SQL Server数据库?

来自分类Dev

如何使用变量中的数据填充sql数据库?

来自分类Dev

从SQL Server数据库保存和更新数据

Related 相关文章

  1. 1

    数据库中的SQL Server对象

  2. 2

    在SQL Server中复制数据库

  3. 3

    在SQL Server中收缩数据库

  4. 4

    如何回滚SQL Server数据库中的数据?

  5. 5

    如何使用SQL Server中的隐藏数据库对象?

  6. 6

    更新SQL数据库中的数据

  7. 7

    自动更新 SQL Server 数据库中的列

  8. 8

    数据库备份中的元数据-SQL Server 2008

  9. 9

    如何通过传递数据库名称访问WPF中的SQL Server数据库

  10. 10

    SQL Server 2005如何从数据库转储中创建数据库

  11. 11

    SQL Server数据库未更新

  12. 12

    如何在SQL Server中创建数据库的别名

  13. 13

    如何在SQL Server数据库中存储图像

  14. 14

    如何找出谁在还原SQL Server中的数据库?

  15. 15

    如何在SQL Server数据库中应用dtplyr

  16. 16

    如何检测我的SQL Server数据库中的更改

  17. 17

    在SQL Server中归档数据库表:是相同的数据库还是不同的数据库?

  18. 18

    SQL server 的数据库是 sql 数据库吗?

  19. 19

    如何使用Mirth从xml文件在SQL Server数据库中插入数据

  20. 20

    如何使用WebMatrix中的Razor连接到SQL Server数据库并检索数据?

  21. 21

    在RODBC中为SQL Server数据库更改默认数据库

  22. 22

    如何使用SQL缩小SQL Server CE数据库

  23. 23

    更新 SQL 数据库中的表

  24. 24

    使用SqlDataAdapter更新SQL Server数据库

  25. 25

    如何将Access数据库与SQL Server同步,在Access数据库中所做的更改应反映在SQL Server数据库中

  26. 26

    如何将Access数据库与SQL Server同步,在Access数据库中所做的更改应反映在SQL Server数据库中

  27. 27

    如何将数据从本地SQL Server数据库更新到联机SQL Server数据库?

  28. 28

    如何使用变量中的数据填充sql数据库?

  29. 29

    从SQL Server数据库保存和更新数据

热门标签

归档