2017-08-24 97 views
0

我有這樣的代碼,SQL服務器不工作:IF EXISTS(SELECT)在如預期

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 

但是,這個代碼不工作,我無法找到相同的根源。有人可以幫幫我嗎?

+5

請說明你是什麼意思時說:「?不工作「是您的表的名稱實際上是‘表’ – Frank

+0

是ID爲AUTO_INCREMENT列?? –

+0

究竟錯誤語法正確 –

回答

0

table是保留關鍵字。所以我想你有一個小小的語法錯誤:Incorrect syntax near the keyword 'table'.[]包裹它,因爲你已經做了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 
0

我沒有看到你的代碼中的任何錯誤,我試圖複製過程,它是工作對於我來說足夠了。你能告訴我你準確面對的錯誤是什麼?

以下是我試圖複製您的方案的代碼:

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 

這是在我的情況下成功更新。

0

您的代碼和語法是正確的。讓我們看一個樣本?例如:

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

BEGIN 
print 1 
END 

ELSE 
BEGIN 
print 2 
END