小编sil*_*lvo的帖子

生成对于给定外键值唯一的增量ID

我们正在开发一个电子商务系统,我们汇总来自不同卖家的订单.正如您可以轻易想象的那样,我们有一个Order表格可以保存所有卖家的订单数据.每个卖家都有一个唯一的AccountID,它是Order表中的外键.

我们希望为进入系统的每个订单生成订单号,以便对于给定的卖方(并且给定AccountID)这些订单号创建序列(第一个订单获得1,然后是2,然后是3等).

我们已经尝试了几种解决方案,但它们有我们想要避免的缺点.所有这些都在触发器内:

ALTER TRIGGER [dbo].[Trigger_Order_UpdateAccountOrderNumber] 
   ON [dbo].[Order]
   AFTER INSERT
BEGIN
     ...
END
Run Code Online (Sandbox Code Playgroud)

我们的解决方案1是:

UPDATE
    [Order]
SET
    AccountOrderNumber = o.AccountOrderNumber
FROM
(
    SELECT
        OrderID,
        AccountOrderNumber =
            ISNULL((SELECT TOP 1 AccountOrderNumber FROM [Order] WHERE AccountID = i.AccountID ORDER BY AccountOrderNumber DESC), 1) +
            (ROW_NUMBER() OVER (PARTITION BY i.AccountID ORDER BY i.OrderID))
    FROM
        inserted AS i
) AS o
WHERE [Order].OrderID = o.OrderID
Run Code Online (Sandbox Code Playgroud)

请注意,我们有READ_COMMITTED_SNAPSHOT ON.它似乎运行了一段时间,但最近我们发现AccountOrderNumber列中有一些重复的值.在分析代码之后,似乎逻辑上可能出现重复项,因为操作不是原子操作,因此如果在完全相同的时间添加2个订单,它们将从表中读取相同的TOP 1值 …

sql t-sql sql-server

7
推荐指数
1
解决办法
173
查看次数

从另一个表单调用方法

我尝试从另一种形式调用方法.我的尝试:

public partial class newLedPopUp : Form
{
    Form1 back = new Form1();
    back.output();
    Close();
}
Run Code Online (Sandbox Code Playgroud)

public partial class Form1 : Form
{
    newLedPopUp popup = new newLedPopUp();

    public void output()
    {
        button3_Click(null, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?我真的找不到我的错误,而且我一直在寻找很长一段时间.

c# winforms

3
推荐指数
1
解决办法
3万
查看次数

标签 统计

c# ×1

sql ×1

sql-server ×1

t-sql ×1

winforms ×1