如何在SQL中使用IF EXISTS(ifexist更新,否则插入SQL)

本文关键字:SQL 更新 ifexist 插入 EXISTS IF | 更新日期: 2023-09-27 18:34:09

string searched = TextBox1.Text; // for example, text is 4477
...
sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin =' " + searched.ToString() + " ') BEGIN UPDATE [Pins] SET SAY= SAY+1, Pin = ' " + searched.ToString() + " ' END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (+1,' " + searched.ToString() + " ') END";
...

我正在使用 SAY 来计算搜索次数。

此代码将列(Pins)上的所有记录更改为搜索的文本。

我的错在哪里/是什么?

如何在SQL中使用IF EXISTS(ifexist更新,否则插入SQL)

在伪代码中,你说

IF EXISTS(SELECT Statement) UPDATE ALL ROWS

使用 EXISTS 执行此操作的正确方法是

UPDATE TABLE
WHERE EXISTS(Correlated SELECT Statement)

您需要有一个不更新所有记录的位置。这将解决它....但这是一个可怕的查询。

IF EXISTS(SELECT * FROM [Pins] WHERE Pin = 'searched.ToString()')
BEGIN 
    UPDATE [Pins] SET SAY = SAY + 1
    WHERE [Pin] = 'searched.ToString() '
END 
ELSE 
BEGIN 
    INSERT INTO Pins(SAY, Pin) VALUES (1, 'searched.ToString()') 
END

你错过了WHERE子句。

我也更喜欢使用 Parameters 而不是字符串级联查询(这使您的代码容易受到 SQL 注入攻击)

string searched = TextBox1.Text; // for example, text is 4477
sorgu.CommandText = "IF EXISTS(SELECT * FROM [Pins] WHERE Pin = @searched) BEGIN UPDATE [Pins] SET SAY=SAY+1 WHERE Pin = @searched END ELSE BEGIN INSERT INTO Pins(SAY,Pin) VALUES (1, @searched) END";
sorgu.Parameters.AddWithValue("@searched", TextBox1.Text);