Вопрос:

SQL Server INSERT INTO с предложением WHERE

sql sql-server database tsql insert

12810 просмотра

6 ответа

404 Репутация автора

Я пытаюсь вставить некоторую информацию о ложных платежах в базу данных разработчиков с помощью этого запроса:

INSERT
    INTO
        Payments(Amount)
    VALUES(12.33)
WHERE
    Payments.CustomerID = '145300';

Как можно настроить это для выполнения? Я также попробовал что-то вроде этого:

IF NOT EXISTS(
    SELECT
        1
    FROM
        Payments
    WHERE
        Payments.CustomerID = '145300' 
) INSERT 
    INTO
        Payments(Amount)
    VALUES(12.33);
Автор: Matt Larson Источник Размещён: 04.01.2018 07:13

Ответы (6)


1 плюс

321 Репутация автора

Похоже, уже установлен идентификатор клиента. В этом случае вы должны использовать оператор update для обновления строки. Операторы вставки добавят совершенно новую строку, которая не может содержать значение.

Автор: Frank Förster Размещён: 04.01.2018 07:18

2 плюса

492 Репутация автора

Если вы хотите вставить новые строки с заданным CustomerID

INSERT
    INTO
        Payments(Amount,CustomerID )
VALUES(12.33,'145300');

в противном случае, если у вас уже есть платеж для клиента, вы можете сделать

UPDATE
        Payments
SET Amount = 12.33
WHERE
    CustomerID = '145300';
Автор: TheOni Размещён: 04.01.2018 07:19

7 плюса

27384 Репутация автора

Решение

Я думаю, что вы пытаетесь сделать заявление об обновлении (установите сумму = 12,33 для клиента с идентификатором = 145300)

UPDATE Payments
SET Amount = 12.33
WHERE CustomerID = '145300'

Иначе, если вы пытаетесь вставить новую строку, то вы должны использовать

IF NOT EXISTS(SELECT 1 FROM Payments WHERE CustomerID = '145300')
    INSERT INTO Payments(CustomerID,Amount)
    VALUES('145300',12.33)

Или, если вы хотите объединить обе команды (если клиент существует, обновите его, вставьте новую строку)

IF NOT EXISTS(SELECT 1 FROM Payments WHERE CustomerID = '145300')
    INSERT INTO Payments(CustomerID,Amount)
    VALUES('145300',12.33)
ELSE
    UPDATE Payments
    SET Amount = 12.33
    WHERE CustomerID = '145300'
Автор: Hadi Размещён: 04.01.2018 07:19

1 плюс

10123 Репутация автора

Вы хотите выполнить обновление;

update Payments set Amount  = 12.33 where Payments.CustomerID = '145300' 
Автор: lucky Размещён: 04.01.2018 07:19

0 плюса

404 Репутация автора

Хорошо, похоже, что мне действительно нужно просто вставить в таблицу Payments правильную CustomerID, так как в настоящее время нет платежей с таким CustomerID, поэтому я не могу ее обновить.

Я побежал, INSERT INTO Payments (CustomerID, Amount, PaymentTypeID) Values ('145300', 24.99, 8);а затем SELECT * FROM Payments WHERE Payments.CustomerID = '145300';подтвердить, и мы в деле. Спасибо всем!

Автор: Matt Larson Размещён: 04.01.2018 07:33

0 плюса

1 Репутация автора

Лучшее решение и без риска тупиков:

UPDATE Payments
    SET Amount = 12.33
WHERE CustomerID = '145300'

INSERT INTO Payments(CustomerID,Amount)
    SELECT '145300',12.33
WHERE @@ROWCOUNT=0
Автор: Vitor Gouveia Размещён: 03.05.2019 03:22
32x32