MSSQL INSERT INTO困扰

时间:2015-10-18 11:56:38

标签: sql sql-server vbscript asp-classic

我正在使用mssql server 8 / Classic ASP with VBscript

我有一个名为web_hist的表,其中有两列cust_noitem_no, 主键是cust_no + item_no。

该表目前包含约80000条记录

  • 当客户在我的网站上下订单时,他的订单会被存储(TEMPORARILY)在一个名为orders的表中。此表还包含字段cust_noitem_no

  • 客户退房后,我想简单地将上述两个字段插入web_hist表中,以便在跳过任何现有记录时订购每条记录。

我正在寻找一个SQL语句,我可以用它来实现上述目标,而不会产生重复键!'错误

2 个答案:

答案 0 :(得分:1)

在插入记录之前测试cust_no表中是否存在具有相同item_noweb_hist的记录相当简单,但这意味着只允许客户使用只需订购一件商品。在我看来,除非你真的希望这种情况发生,否则你应该重新考虑你的web_hist表设计。

如果你选择按原样保留主键,你应该这样做:

IF NOT EXISTS (
    SELECT 1
    FROM web_hist
    WHERE cust_no = @cust_no
    AND item_no = @item_no
)
BEGIN
    INSERT INTO web_hist (cust_no, item_no) VALUES @cust_no, @item_no)
END
/* optional
ELSE
BEGIN
  -- Show a message to the customer that he already ordered this item.
END
*/

答案 1 :(得分:0)

您不应将客户编号+商品编号用作主键,因为一个客户可以多次购买同一商品。

您可以使用客户编号+订单编号,因为客户将拥有一个订单的唯一订单编号。