2

こんにちは、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

4 に答える 4

4

の後の開き括弧を削除しますSET

UPDATE Firma SET firma=@firma .... 

そしてもちろん、フィールドのリストが更新された後のクロージングです。

ただし、2 つのステートメントを区別できるように、IF の前にセミコロンも追加する必要があります。

UPDATE ...... WHERE id='1'; IF @@ROWCOUNT ......
于 2013-09-09T08:00:52.897 に答える
2

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

http://technet.microsoft.com/en-us/library/bb510625.aspx

于 2013-09-09T07:56:57.603 に答える
0

IMHO、最初に SQL ステートメントを正しくインデントする必要があります。どこが間違っているのかが分かりやすくなります。

おそらく括弧の問題です。試す :

IF (@@ROWCOUNT=0) BEGIN ... END
于 2013-09-09T08:00:39.000 に答える