2015-10-18 78 views
-1

我使用MSSQL服務器8 /經典ASP使用VBScriptMSSQL INSERT INTO愁楚

我有表名爲web_hist,與兩列cust_noitem_no, 主鍵是CUST_NO + ITEM_NO。

表包含目前約80000條記錄

  • 當客戶在我的網站的訂單他的順序存儲在表(臨時)稱爲orders。該表格還包含字段cust_noitem_no

  • 在客戶退房後,我會很簡單地將上面的兩個字段插入web_hist表中,以便爲每個訂購的記錄跳過任何現有記錄。

我正在尋找一個SQL語句,我可以使用它來實現上述目標,而不會產生'重複密鑰!'錯誤

+1

我會建議使用標識列作爲主鍵。您的重複鍵錯誤很可能是由您的數據中的重複鍵造成的。你的帖子表明你桌子上的PK是cust_no + item_no?你將這些值加在一起嗎?或者你的意思是cust_no,item_no?在任何一種情況下,數據集中的任何值(或表中已存在的值)都將導致dup鍵錯誤。 –

+0

Didi你試試看嗎?我有,請告訴我們您的試驗 –

回答

0

您不應將客戶編號+料號作爲主鍵,因爲一位客戶可以多次購買同一料品。

您可以使用客戶號碼+訂單號碼,因爲客戶將擁有一個訂單的唯一訂單號碼。

+0

謝謝你的答案 – Dory550

+0

謝謝你的答案 貌似我沒有澄清足夠 – Dory550

+0

對不起..我是一個newbee在這個論壇 它看起來像我沒有澄清足夠 表'web_hist'只是客戶過去購買的所有商品的歷史清單 它用於顯示客戶的歷史,從而允許他從他的商品列表中下訂單 我們是批發商和我們的客戶反覆屢次購買每件商品並經常購買 對不起,請諒解 Dory – Dory550

1

這是相當簡單的測試,如果使用相同的cust_noitem_no記錄在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 
*/