INSERT INTO Checkout(ProductID, MemberID, Quantity)
SELECT ProductID, MemberID, Quantity
FROM Cart
WHERE (MemberID = MemberID)
DELETE FROM CART WHERE (MemberID = MemberID)
sql语句在Select,WHERE部分之前是可行的,但是一旦我添加了delete语句,就会出现错误(查询表达式中的语法错误缺少运算符)。第二个MemberID是我为第一个MemberID参数赋予的值。请帮我解决这个问题,因为在将数据从第一个表格传输到第二个表格后,我需要从第一个表格中删除数据。
[编辑]感谢您的所有建议,现在我意识到WHERE(MemberID = MemberID) 将整个表导入到新表中,此语句也将删除整个表的内容。我该怎么做才能确保sql语句只删除特定成员项?
主页>会员登录页面>购买商品>存储在购物车数据库中的商品(具有会员ID)>仅显示购物车中特定会员购买的商品>继续结帐(仅显示该成员项目,删除购物车项目)
答案 0 :(得分:1)
问题在于第二个“MemberID”。这需要是常量或具有与字段名称不冲突的变量名称。消除歧义的一些技巧显示在相关的SO帖子中:How do you avoid column name conflicts?
答案 1 :(得分:1)
您没有提到您正在使用的SQL Server的版本 - 但您可以使用OUTPUT
clause DELETE
语句来实现您的目标正在寻找。 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
表中选择要删除的行..
答案 2 :(得分:0)
将传递的数据存储到新声明的变量中,并将该变量用于以下所有位置,这样可以正常工作,谢谢
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)