如何在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)上的所有记录更改为搜索的文本。
我的错在哪里/是什么?
在伪代码中,你说
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);