web-dev-qa-db-fra.com

SQL Server INSERT INTO avec la clause WHERE

J'essaie d'insérer des informations de paiement factices dans une base de données dev avec cette requête:

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

Comment peut-on ajuster ceci pour exécuter? J'ai aussi essayé quelque chose comme ça: 

IF NOT EXISTS(
    SELECT
        1
    FROM
        Payments
    WHERE
        Payments.CustomerID = '145300' 
) INSERT 
    INTO
        Payments(Amount)
    VALUES(12.33);
4
Matt Larson

Je pense que vous essayez de faire une déclaration de mise à jour (définir le montant = 12,33 pour le client avec l'ID = 145300)

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

Sinon, si vous essayez d'insérer une nouvelle ligne, vous devez utiliser

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

Ou si vous voulez combiner la commande (si le client existe, mettez à jour sinon insérez une nouvelle ligne)

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'
6
Hadi

Si vous souhaitez insérer de nouvelles lignes avec l'ID client donné

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

sinon, si vous avez déjà un paiement pour le client, vous pouvez faire:

UPDATE
        Payments
SET Amount = 12.33
WHERE
    CustomerID = '145300';
2
TheOni

Cela ressemble à avoir le customerID déjà défini. Dans ce cas, vous devez utiliser une instruction update pour mettre à jour une ligne. Les instructions d’insertion ajouteront une toute nouvelle ligne qui ne peut pas contenir de valeur.

1
Frank Förster

Voulez-vous effectuer la mise à jour?

update Payments set Amount  = 12.33 where Payments.CustomerID = '145300' 
1
lucky

Ok, il semble que je doive en fait simplement insérer un insert dans la table Paiements contenant le bon code client, car il n’existe actuellement aucun paiement avec ce code client, je ne peux donc pas le mettre à jour. 

J'ai exécuté INSERT INTO Payments (CustomerID, Amount, PaymentTypeID) Values ('145300', 24.99, 8); puis SELECT * FROM Payments WHERE Payments.CustomerID = '145300'; pour confirmer et nous sommes en affaires. Merci tout le monde!

0
Matt Larson