带有WHERE子句的SQL Server INSERT INTO

时间:2018-01-04 19:13:32

标签: sql sql-server database tsql insert

我正在尝试使用此查询将一些模拟付款信息插入到开发人员数据库中:

table tr td a { padding: 2%; }
.post-content li {
    margin-top: 0.5em;
    line-height: 170%;
}

如何调整此项来执行?我也试过这样的事情:

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

8 个答案:

答案 0 :(得分:7)

我认为您正在尝试更新声明(对于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'

答案 1 :(得分:2)

如果要插入具有给定CustomerID的新行

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

如果您已经为客户付款,则可以执行以下操作:

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

答案 2 :(得分:1)

听起来已经设置了customerID。在这种情况下,您应该使用update语句来更新行。 Insert语句将添加一个不能包含值的全新行。

答案 3 :(得分:1)

您想要执行更新吗?

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

答案 4 :(得分:0)

好吧,看起来我实际上只需要插入具有正确CustomerID的Payments表,因为目前没有使用该CustomerID的付款,所以我无法更新它。

我运行INSERT INTO Payments (CustomerID, Amount, PaymentTypeID) Values ('145300', 24.99, 8);然后SELECT * FROM Payments WHERE Payments.CustomerID = '145300';确认并开始营业。谢谢大家!

答案 5 :(得分:0)

更好的解决方案,并且没有死锁的风险:

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

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

答案 6 :(得分:0)

如果记录不存在,我确实会插入到表中。可能不完全是之后的内容,但可能会有所帮助

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

答案 7 :(得分:0)

如果要修改现有行,请尝试如下更新,

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