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

时间:2013-09-09 07:51:17

标签: c# sql sql-server winforms

您好我已经得到以下声明,如果找不到id = 1

的任何值,我希望INSERT INTO

如果存在,我想更新

我受此启发:

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

4 个答案:

答案 0 :(得分:4)

删除SET

后的左括号
UPDATE Firma SET firma=@firma .... 

当然,更新字段列表后的结束时间。

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

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

答案 1 :(得分:2)

您是否考虑过使用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

答案 2 :(得分:1)

您需要分离SQL语句。在IF陈述之前尝试分号。

答案 3 :(得分:0)

恕我直言,你首先需要正确地缩进你的SQL语句。更容易看出错误在哪里。

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

IF (@@ROWCOUNT=0) BEGIN ... END