C# SqlCommand如果存在-更新,如果不存在-插入到

C# SqlCommand如果存在-更新,如果不存在-插入到,c#,sql,sql-server,winforms,C#,Sql,Sql Server,Winforms,您好,我得到了以下语句,如果找不到id=1的值,我希望将其插入其中 如果它存在,我想更新 我受此启发: UPDATE Table1 SET (...) WHERE Column1='SomeValue' IF @@ROWCOUNT=0 INSERT INTO Table1 VALUES (...) 但是得到了这个例外:附近有不正确的语法 但是我找不到哪里出错了,有人能帮我解决这个问题吗 string sqlcom = "UPDATE firma SET (firma=@fir

您好,我得到了以下语句,如果找不到id=1的值,我希望将其插入其中

如果它存在,我想更新

我受此启发:

    UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)
但是得到了这个例外:附近有不正确的语法

但是我找不到哪里出错了,有人能帮我解决这个问题吗

 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();

您需要分隔SQL语句。在IF语句之前尝试使用分号。

您需要分隔SQL语句。在IF语句之前尝试使用分号。

是否考虑过使用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, ....)

您是否考虑过使用mergesql命令

这将允许您执行更新,如果记录符合某些条件,则执行插入

差不多

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, ....)

首先,您需要正确缩进SQL语句。更容易看出错误在哪里

这可能是一个括号问题。 尝试:


首先,您需要正确缩进SQL语句。更容易看出错误在哪里

这可能是一个括号问题。 尝试:


在设置后删除开括号

当然,还有字段列表更新后的结束字段

但是,还应在IF之前添加分号,以便区分这两个语句

UPDATE ...... WHERE id='1'; IF @@ROWCOUNT ......

在设置后删除开括号

当然,还有字段列表更新后的结束字段

但是,还应在IF之前添加分号,以便区分这两个语句

UPDATE ...... WHERE id='1'; IF @@ROWCOUNT ......

谢谢你的时间,但使用分号还是得到了同样的前男友,是不是因为我可能误解了@ROWCOUNT的用法?它的用法正确吗?谢谢你的时间,但是使用分号还是得到了相同的Ex,是不是因为我可能误解了@ROWCOUNT的用法?它是否正确使用?删除设置块中的和周围的值-即设置firma=@firma,ulice=@ulice,…谢谢Tim。它工作得很好。删除SET块中的和周围的值-即SET firma=@firma,ulice=@ulice,…谢谢Tim。它工作得很好。+1但是请注意,这个命令从Sql Server 2008开始就可以使用,我仍然想知道为什么MS的人员将它变得如此复杂+1但是请注意,这个命令从Sql Server 2008开始就可以使用,我仍然想知道为什么MS的人员将它变得如此复杂