2017-06-30 8 views
3

私のC#クラスには次のクエリが書かれています。mvcのON DUPLICATE KEY UPDATEに関する問題

string query = @"INSERT INTO UserPersonalInfo(col1,col2,col3) 
       VALUES (@c1,@c2,@c3) ON DUPLICATE KEY UPDATE col2 = @c2, col3= @c3"; 
query += " SELECT SCOPE_IDENTITY()"; 

しかし、クエリの上に実行している間、私は、 'ON' のキーワード近い

不適切な構文を、次のエラーを取得しています。

+2

string query = ...を置き換えるあなたのC#コードでは、PKです。どのデータベースを実際に使用していますか? –

+0

DBMSとは何ですか? – Siyual

+0

私はSQL Server(SQL Server 2008 R2) – Arc

答えて

0

使用MERGEcol1を想定すると、デモ

DECLARE @ui TABLE(
    col1 INT PRIMARY KEY, 
    col2 INT 
    ) 

INSERT INTO @ui(col1,col2) 
VALUES (1,100), (2,200); 

-- parameters 
DECLARE @c1 INT = 1, @c2 INT = 300; 

MERGE @ui AS T 
USING (
    VALUES (@c1, @c2) 
) AS S(col1,col2) 
ON (T.col1 = S.col1) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(col1,col2) VALUES(S.col1,S.col2) 
WHEN MATCHED 
    THEN UPDATE SET T.col2 = S.col2; 

SELECT * 
FROM @ui 

はちょうどあなたがSQL Serverを混合しているとMySQLを構築

string query = @"MERGE UserPersonalInfo AS T 
USING (
    VALUES (@c1,@c2,@c3) 
) AS S(col1,col2,col3) 
ON (T.col1 = S.col1) 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(col1,col2, col3) VALUES(S.col1,S.col2, S.col3) 
WHEN MATCHED 
    THEN UPDATE SET T.col2 = S.col2, T.col3 = S.col3"; 
+0

どのように私は文字列の形でこれを書くことができますか?私はC#からクエリを実行しています。 – Arc

+0

@Arc、編集済みの回答を参照してください。 – Serg

+0

私はちょうど同じ文字列を書いた:p bdwその作業:)しかし、私は同じもののためのいくつかのテストを行うことができます:D私の評判が低いためupvoteすることができません:( – Arc

関連する問題