2016-05-24 1 views
0

私は次のクエリを書くことを試みていますが、私は非常にSQLで快適ではないです。 私は挿入と更新を隔離し、それは動作しますが、私は条件付き制御を行うことはできません。 私はそれが常に失敗する理由を理解していない、何か私を助けることができますか?私はSQLのクエリの状態を確認する方法を理解していません

IF (SELECT * FROM Infopoints WHERE name = @name) THEN 
    BEGIN 
     INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name) 
     VALUES(@idInfopoint, @createdAt, @updatedAt, @name) 
    END; 
    ELSE 
    BEGIN 
     UPDATE Infopoints SET updatedAt = @updatedAt WHERE name = @name; 
    END; 
ENDIF;"; 

答えて

0

希望するon duplicate key update

CREATE UNIQUE INDEX idx_infopoints_name ON infopoints(name); 

あなたがIFのためにしたいロジックは次のとおりです:

IF NOT EXISTS (SELECT * FROM Infopoints WHERE name = @name) THEN 
. . . 

これが機能するために

INSERT INTO Infopoints (idInfopoint, createdAt, updatedAt, name) 
     VALUES(@idInfopoint, @createdAt, @updatedAt, @name) 
     ON DUPLICATE KEY UPDATE updatedAt = @updatedAt; 

は、あなたがnameに一意索引が必要:私はロジックがあると思いますしかし、ON DUPLICATE KEY UPDATEはより良いアプローチです。

0

IF条件のためのあなたの構文がオフになって、代わりにこれを試してみてください。

If Not Exists (Select * From Infopoints Where Name = @Name) 
Begin 
    Insert Into Infopoints 
       (idInfopoint, createdAt, updatedAt, name) 
    Values  (@idInfopoint, @createdAt, @updatedAt, @name) 
End 
Else 
Begin 
    Update Infopoints 
    Set  UpdatedAt = @UpdatedAt 
    Where Name = @Name 
End 
関連する問題