SqlCommand 如果存在 - 更新 ,如果不存在 - 插入
本文关键字:如果 不存在 插入 如果不 更新 存在 SqlCommand | 更新日期: 2023-09-27 18:30:35
>你好,我有以下语句,如果没有找到id = 1的任何值,我希望它插入
如果存在,我想更新
我受到以下启发:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
但是得到这个异常:Incorrect syntax near (.
但是我找不到我在哪里犯了错误,有人能帮我解决这个问题吗?
string sqlcom = "UPDATE firma SET (firma=@firma,ulice=@ulice,mesto=@mesto,psc=@psc,ico=@ico,dico=@dico,dph=@dph,sdph=@sdph,upo1=@upo1,raz1=@raz1) WHERE id='1' IF @@ROWCOUNT=0 INSERT INTO firma (firma,ulice,mesto,psc,ico,dico,dph,sdph,upo1,raz1) VALUES (@firma,@ulice,@mesto,@psc,@ico,@dico,@dph,@sdph,@upo1,@raz1)";
SqlCommand prikaz =
new SqlCommand(sqlcom, spojeni);
prikaz.Parameters.AddWithValue("@firma", ffirma.Text);
prikaz.Parameters.AddWithValue("@ulice", fulice.Text);
prikaz.Parameters.AddWithValue("@mesto", fmesto.Text);
prikaz.Parameters.AddWithValue("@psc", fpsc.Text);
prikaz.Parameters.AddWithValue("@ico", fico.Text);
prikaz.Parameters.AddWithValue("@dico", fdico.Text);
prikaz.Parameters.AddWithValue("@dph", fdph.Text);
prikaz.Parameters.AddWithValue("@sdph", fsdph.Text);
prikaz.Parameters.AddWithValue("@raz1", fraz1.Text);
prikaz.Parameters.AddWithValue("@upo1", fupo1.Text);
spojeni.Open();
prikaz.ExecuteNonQuery();
spojeni.Close();
删除SET
后的左括号
UPDATE Firma SET firma=@firma ....
当然,还有字段列表更新后的结束。
但是,还应在 IF 之前添加分号,以便区分两个语句
UPDATE ...... WHERE id='1'; IF @@ROWCOUNT ......
您是否考虑过使用 MERGE
Sql 命令?
如果记录符合某些条件,这将允许您进行更新,否则进行插入。
类似的东西
MERGE firma AS target
USING (SELECT @SomeValue, @firma, @ulice...) AS source (ID, Firma, Ulice)
ON (target.ID= source.ID)
WHEN MATCHED THEN
UPDATE SET
Firma = source.Firma,
Ulice = source.Ulice,
...
WHEN NOT MATCHED THEN
INSERT (ID, Firma, Ulice, ...)
VALUES (source.ID, source.Firma, source.Ulice, ....)
http://technet.microsoft.com/en-us/library/bb510625.aspx
您需要分隔 SQL 语句。尝试在IF
语句之前使用分号。
恕
我直言,您首先需要正确缩进您的 SQL 语句。会更容易看到错误在哪里。
这可能是一个括号问题。尝试:
IF (@@ROWCOUNT=0) BEGIN ... END