web-dev-qa-db-ja.com

SQL ServerのINSERT INTOとWHERE句

私はこのクエリでいくつかの模擬支払い情報を開発データベースに挿入しようとしています:

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);
6
Matt Larson

更新ステートメントを実行しようとしていると思います(ID = 145300の顧客の場合、セット金額= 12.33)

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

指定されたCustomerIDで新しい行を挿入する場合

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

それ以外の場合は、既に顧客への支払いがある場合は、次のことができます。

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

CustomerIDがすでに設定されているようです。その場合は、更新ステートメントを使用して行を更新する必要があります。 Insertステートメントは、値を含めることができない完全に新しい行を追加します。

1
Frank Förster

更新を実行しますか?

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

わかりました。実際には、正しいCustomerIDを持つPaymentsテーブルに挿入する必要があるようです。そのCustomerIDを持つPaymentsは現在ないため、更新できません。

私はINSERT INTO Payments (CustomerID, Amount, PaymentTypeID) Values ('145300', 24.99, 8);を実行してからSELECT * FROM Payments WHERE Payments.CustomerID = '145300';確認して、作業を開始します。みんな、ありがとう!

0
Matt Larson

この方法でレコードが存在しない場合は、テーブルに挿入します。完全に後のものではないかもしれませんが、それは役立つかもしれません

insert into x (a,b)
select 1,2
where 0=(select count(*) from x where a = 1 and b = 2)
0
Ab Bennett

より良いソリューションとデッドロックのリスクなし:

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

INSERT INTO Payments(CustomerID,Amount)
    SELECT '145300',12.33
WHERE @@ROWCOUNT=0
0
Vitor Gouveia