2011-12-10 52 views
1
INSERT INTO Checkout(ProductID, MemberID, Quantity) 
    SELECT ProductID, MemberID, Quantity 
    FROM Cart 
    WHERE (MemberID = MemberID) 
    DELETE FROM CART WHERE (MemberID = MemberID) 

的SQL語句是可行的,直到選擇,其中的一部分,但一旦我添加delete語句,則錯誤(語法錯誤缺少查詢表達式運算符)出來。第二個MemberID是我給第一個MemberID參數的值。請幫我解決這個問題,因爲在將數據從第一個表格傳輸到第二個表格後,我需要從第一個表格中刪除數據。糾正這個SQL語句插入,選擇,刪除

[編輯]感謝你們所有的建議,現在我意識到對於WHERE(MemberID = MemberID) 將整個表導入到新表中,並且此語句也會刪除整個表內容。我能做些什麼來確保sql語句只刪除特定成員項目?

主頁>會員登錄頁面>購買商品>存儲在購物車數據庫中的商品(含會員ID)>僅顯示特定會員購物車中的物品>繼續結帳(僅顯示該會員物品,刪除購物車物品)

+2

如果你打四個空格的代碼片段的東西將被格式化之前,並強調好一點(也可以用這樣的代碼段內換行),使其更容易助陣。 – Jeroen

+0

你究竟在用什麼'WHERE MemberID = MemberID'子句來定義?現在 - 這是永遠是真的,因此將從'Cart'表中刪除**所有行** ... –

+0

@KayLee:在這種情況下,您需要以某種方式將該成員的ID存儲到單獨的SQL變量中,例如'@ MemberID'然後使用:'WHERE MemberID = @ MemberID' –

回答

1

問題出在第二個「MemberID」。這需要是一個常量或具有與字段名稱不衝突的變量名稱。許多用於消歧技術顯示在相關的SO職位:How do you avoid column name conflicts?

+0

我將值更改爲其他名稱,但它仍然不會工作。如果我更改的值名稱以外的成員身份,甚至插入查詢將無法正常工作! –

1

你沒有提到的SQL Server版本你使用的是什麼 - 但你也許能夠使用OUTPUT clauseDELETE聲明實現你正在尋找的東西。該OUTPUT條款是在SQL Server 2005中引入的,所以如果你是2005或更高版本上,該代碼段應爲你工作:

試試這個:

DELETE FROM dbo.CART 
OUTPUT deleted.ProductID, deleted.MemberID, deleted.Quantity 
    INTO dbo.Checkout(ProductID, MemberID, Quantity) 
WHERE MemberID = @MemberID 

基本上,這違背了DELETE聲明你的dbo.Cart表,它捕獲哪些行已被刪除;那些然後又被插入到dbo.Checkout表中。

而且 - 在 WHERE條款在這種條件下,似乎很有趣 - 基本上,這將選擇並因此刪除 所有行從表中 ......

更新:我假設你以某種方式相關會員的ID存儲在@MemberID並用它來選擇行從dbo.Cart表中刪除..

+0

是的,我現在意識到條件會複製和刪除整個表格的內容。我如何設置只有特定會員項目纔會被複制和刪除的條件? –

+0

@KayLee:好吧,這是由你來知道你想刪除哪些成員.....你基於什麼決定?我們不可能知道...... –

+0

我只想顯示和刪除特定成員購買的項目..... –

0

存儲您將數據傳遞到新聲明的變量並使用該變量如下無處不在,這將工作好,比KS

DECLARE @PassedMemberID INT 
SET @PassedMemberID = MemberID --Store your passing MemberID here for later use 

INSERT INTO Checkout(ProductID, MemberID, Quantity) 
    SELECT ProductID, MemberID, Quantity 
    FROM Cart 
    WHERE (MemberID = @PassedMemberID) 
DELETE FROM CART WHERE (MemberID = @PassedMemberID) 
+0

抱歉可以完成查詢嗎?謝謝 –

+0

你好@KayLee,對不起,遲交回復,無意中我的查詢是不完整的,但是,根據你的問題我明白:你傳遞值作爲'MemberID',我存儲在一個變量,然後我用它來每個聲明,請讓我知道你的結果,或者如果你有任何意見,謝謝你的時間。 –