簡體   English   中英

帶有 WHERE 子句的 SQL Server INSERT INTO

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM