首页 > 解决方案 > 在 SQL SERVER 2012 中为多个项目创建单个事务

问题描述

帮我做我的POS。我正在为快餐做一笔交易。我真的对交易的建筑代码感到困惑。我想这样做

ID !交易ID!产品名称 !

ID ! TRANSACTIONID ! PRODUCT
1     TR1             DISH1
2     TR1             DISH2
3     TR2             DISH3
4     TR3             DISH4
5     TR3             DISH5
6     TR3             DISH2
它更像那样。抱歉,如果我的代码不清楚,请理解我。这是我第一次问。谢谢

下面的代码是我将其插入数据库的模式,但事务 ID 不会像上面那样。

 Private Sub TransactionUpdate()
    Dim pn, pp, pq, pt As String
    If ListView1.Items.Count = Nothing Then Exit Sub
    PanelOrder()
    For Each item As ListViewItem In ListView1.Items
        pn = item.SubItems(0).Text
        pp = item.SubItems(1).Text
        pq = item.SubItems(2).Text
        pt = item.SubItems(3).Text
        SQL.AddParam("@transactionstate", "Served")
        SQL.AddParam("@productname", pn)
        SQL.AddParam("@employeeid", txtusername.Text.ToUpper)
        SQL.AddParam("@employeename", btnlogin.Text)
        SQL.AddParam("@productprice", pp)
        SQL.AddParam("@productquantity", pq)
        SQL.AddParam("@producttotal", pt)


        SQL.ExecQuery("Insert Into Emp_Transaction(ProductName,EmployeeName,TotalPrice,Transaction_Date,Transaction_Time,ProductQuantity,TransactionState) " &
                    "Values(@productname,@employeename,@producttotal,GETDATE(),GETDATE(),@productquantity,@transactionstate)")
        'TransactionID,ProductName,EmployeeName,TotalPrice,Transaction_Date,Transaction_Time,ProductQuantity,TransactionState
        SQL.ExecQuery("Update Emp_Transaction " &
                        "Set ProductID=(SELECT Product.ProductID from Product Where Product.ProductName=Emp_Transaction.ProductName), EmployeeID=(SELECT Employees.EmployeeID from Employees Where Employees.Name=Emp_Transaction.EmployeeName)")
    Next
    If SQL.HasException(True) Then Exit Sub



End Sub

标签: sql-servervb.net

解决方案


就个人而言,我会编写一个存储过程来进行插入,然后我会使用相同的参数调用存储过程。

程序看起来像这样

CREATE PROCEDURE dbo.AddTransaction @productname      VARCHAR(100)
                                   ,@employeename     VARCHAR(100)
                                   ,@producttotal     INTEGER
                                   ,@productquantity  INTEGER
                                   ,@transactionstate VARCHAR(100)
AS
BEGIN

  DECLARE @ProductId INT, @EmployeeId INT;

  SELECT @ProductId = productID FROM dbo.Product WHERE ProductName = @productname;

  SELECT @EmployeeId = SELECT EmployeeID FROM dbo.Employees WHERE name = @EmployeeName;

  INSERT INTO dbo.Emp_Transaction(ProductName,EmployeeName,TotalPrice,Transaction_Date,Transaction_Time,ProductQuantity,TransactionState
                                 ,ProductId, EmployeeId)
    VALUES(@productname,@employeename,@producttotal,GETDATE(),GETDATE(),@productquantity,@transactionstate
          ,@ProductId, @EmployeeID );

END;

当然,您可能需要稍微更改数据类型。

话虽如此,您的 Emp_Transaction 表似乎至少存在一个问题,因为它没有“标准化”。

表中同时包含 ProductId 和 ProductName 不是标准化的,因为其中一个是直接从另一个派生而来的。您可能应该删除 ProductName

EmployeeId 和 EmployeeName 也是如此

另一个细节是,最好始终指定表的架构名称,例如dbo.Emp_Transaction而不是Emp_Transaction


推荐阅读