SQL Server中的IF EXISTS(SELECT)未按预期工作

nnsrf1az  于 2023-02-03  发布在  SQL Server
关注(0)|答案(3)|浏览(142)

我有一个代码是这样的:

IF EXISTS (SELECT * FROM table WHERE id = @id)
BEGIN
    UPDATE table
    SET stock = stock + @stock
    WHERE id = @id
END
ELSE
BEGIN
    INSERT INTO [table] ([id], [name], [stock])
    VALUES (@id, @name, @stock)
END

但是,这段代码不工作,我无法找到相同的根本原因。有人能请帮助我吗?

bjp0bcyl

bjp0bcyl1#

我没有看到任何错误在您的代码,我试图复制的过程中,它是为我工作的罚款。你能告诉我什么是错误,你面临的确切。
下面是我试图复制您的场景的代码:

CREATE TABLE stocks (
    id INT
    ,NAME VARCHAR(100)
    ,stock BIGINT
    )

CREATE PROCEDURE InsertStocks @id INT
    ,@name VARCHAR(100)
    ,@stock BIGINT
AS
BEGIN
    IF EXISTS (
            SELECT *
            FROM stocks
            WHERE id = @id
            )
    BEGIN
        UPDATE stocks
        SET stock = stock + @stock
        WHERE id = @id
    END
    ELSE
    BEGIN
        INSERT INTO stocks (
            [id]
            ,[name]
            ,[stock]
            )
        VALUES (
            @id
            ,@name
            ,@stock
            )
    END
END

INSERT INTO stocks
VALUES (
    1
    ,'abc'
    ,200
    )

INSERT INTO stocks
VALUES (
    2
    ,'abc'
    ,300
    )

INSERT INTO stocks
VALUES (
    3
    ,'abc'
    ,500
    )

EXEC Insertstocks 1
    ,'abc'
    ,700

在我的情况下,这已成功更新。

qxgroojn

qxgroojn2#

table是一个保留关键字。所以我猜您有一个小语法错误:Incorrect syntax near the keyword 'table'.使用[] Package 它,就像您已经对INSERT语句所做的那样

IF EXISTS (
        SELECT * FROM [table] WHERE id = @id)
BEGIN
        UPDATE  [table] SET     stock   = stock + @stock
        WHERE   id      = @id
END
ELSE
BEGIN
        INSERT INTO [table] ([id]
        ,[name]
        ,[stock])
            VALUES
            (
                @id,@name,@stock
            )
        END
bkhjykvo

bkhjykvo3#

您的代码和语法是正确的。让我们看一个示例:

if EXISTS(select * from dbo.tbName where Id=1)

BEGIN
print 1
END

ELSE
BEGIN
print 2
END

相关问题