私はこのクエリでいくつかの模擬支払い情報を開発データベースに挿入しようとしています:
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);
更新ステートメントを実行しようとしていると思います(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'
指定されたCustomerIDで新しい行を挿入する場合
INSERT
INTO
Payments(Amount,CustomerID )
VALUES(12.33,'145300');
それ以外の場合は、既に顧客への支払いがある場合は、次のことができます。
UPDATE
Payments
SET Amount = 12.33
WHERE
CustomerID = '145300';
CustomerIDがすでに設定されているようです。その場合は、更新ステートメントを使用して行を更新する必要があります。 Insertステートメントは、値を含めることができない完全に新しい行を追加します。
更新を実行しますか?
update Payments set Amount = 12.33 where Payments.CustomerID = '145300'
わかりました。実際には、正しいCustomerIDを持つPaymentsテーブルに挿入する必要があるようです。そのCustomerIDを持つPaymentsは現在ないため、更新できません。
私はINSERT INTO Payments (CustomerID, Amount, PaymentTypeID) Values ('145300', 24.99, 8);
を実行してからSELECT * FROM Payments WHERE Payments.CustomerID = '145300';
確認して、作業を開始します。みんな、ありがとう!
この方法でレコードが存在しない場合は、テーブルに挿入します。完全に後のものではないかもしれませんが、それは役立つかもしれません
insert into x (a,b)
select 1,2
where 0=(select count(*) from x where a = 1 and b = 2)
より良いソリューションとデッドロックのリスクなし:
UPDATE Payments
SET Amount = 12.33
WHERE CustomerID = '145300'
INSERT INTO Payments(CustomerID,Amount)
SELECT '145300',12.33
WHERE @@ROWCOUNT=0