Исправьте этот оператор SQL для Вставить, выбрать, удалить - PullRequest
1 голос
/ 11 декабря 2011
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. Пожалуйста, помогите мне решить эту проблему, так как после того, как я перенесу данные из первой таблицы во вторую, мне нужно удалить данные из первой таблицы.

[Редактировать] Благодаря вам все предложения, и теперь я понял, что для ГДЕ (MemberID = MemberID) импортирует всю таблицу в новую таблицу, и этот оператор также удалит все содержимое таблицы. Что я могу сделать, чтобы убедиться, что оператор sql удаляет только конкретный элемент member?

Главная страница> Страница входа пользователя> Купите что-нибудь> Предмет, сохраненный в базе данных корзины покупок (с идентификатором участника)> показать только купленный товар определенного участника в корзине> перейти к оформлению заказа (показать только этот элемент участника, удалить элемент корзины)

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Вы не упомянули, какую версию SQL Server вы используете, но вы можете использовать выражение OUTPUT для оператора 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 кажется довольно забавным - в основном, это выберет и, следовательно, удалит все строки из вашей таблицы ......

Обновление: Я предполагаю, что вы каким-то образом сохраняете идентификатор соответствующего члена в @MemberID и используете его, чтобы выбрать строки для удаления из таблицы dbo.Cart.

1 голос
/ 11 декабря 2011

Проблема со вторым "MemberID". Это должна быть константа или имя переменной, которая не конфликтует с именем поля. Ряд методов устранения неоднозначности показан в соответствующем сообщении SO: Как избежать конфликтов имен столбцов?

0 голосов
/ 11 декабря 2011

Сохраните передаваемые данные во вновь объявленной переменной и используйте эту переменную везде, как показано ниже, это будет работать нормально, спасибо

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...