[英]SQL Server INSERT INTO with WHERE clause
我正在嘗試使用以下查詢將一些模擬付款信息插入到開發數據庫中:
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';
確認,我們在做生意。 謝謝大家!
更好的解決方案並且沒有死鎖的風險:
UPDATE Payments
SET Amount = 12.33
WHERE CustomerID = '145300'
INSERT INTO Payments(CustomerID,Amount)
SELECT '145300',12.33
WHERE @@ROWCOUNT=0
如果記錄不以這種方式存在,我會插入到表中。 可能不完全是之后的但它可能會有所幫助
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';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.