我正在使用mssql server 8 / Classic ASP with VBscript
我有一个名为web_hist
的表,其中有两列cust_no
和item_no
,
主键是cust_no + item_no。
该表目前包含约80000条记录
当客户在我的网站上下订单时,他的订单会被存储(TEMPORARILY)在一个名为orders
的表中。此表还包含字段cust_no
和item_no
。
客户退房后,我想简单地将上述两个字段插入web_hist
表中,以便在跳过任何现有记录时订购每条记录。
我正在寻找一个SQL语句,我可以用它来实现上述目标,而不会产生重复键!'错误
答案 0 :(得分:1)
在插入记录之前测试cust_no
表中是否存在具有相同item_no
和web_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)
您不应将客户编号+商品编号用作主键,因为一个客户可以多次购买同一商品。
您可以使用客户编号+订单编号,因为客户将拥有一个订单的唯一订单编号。