2012-09-23 2 views
7

를 삽입 존재하는 경우 어떻게 할 수 있습니까 INSERT 행의 경우 존재하는 경우 아직은 SQL Server CE 데이터베이스 테이블에 존재 UPDATE하지 않는 이유는 무엇입니까?SQL 서버 CE : 다른 업데이트가

많은 SQL 쿼리를 시도하고 오류가 계속 발생했습니다. 이것은 작동하지 않습니다.

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue') 
    UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
ELSE 
    INSERT INTO Table1 VALUES (...) 

업데이트는 :

나를 위해 작동되는이를 발견했다. 다른 좋은 제안은 환영합니다.

INSERT INTO Table1 VALUES (...) 
    SELECT (........) 
    WHERE NOT Exists (SELECT ........) 
    -- INSERT with Default value if not exist. Next, UPDATE it 
    UPDATE Table1 SET (...) WHERE Column1='SomeValue' 
+0

당신은 모든 동시성에서 어떤 가능성을 기대하고 있습니까? 아니면 단일 사용자 응용 프로그램을위한이 데이터베이스입니까? –

+0

@MartinSmith, 단일 사용자 모바일 앱입니다. – user960567

+0

참고 사항 : http://stackoverflow.com/questions/728373/performing-insert-or-update-upsert-on-sql-server-compact-edition – Seph

답변

2

난 당신이 SQL 및 SQL 서버-CE 태그 것을 알고 있지만, 경우에 당신은이 문제를 해결하기 위해 C# 코드를 사용하여 열려있어 .. : 집합이 어떻게되어

C#을 사용하고 결과를 I

  // UpdateRow is a struct/class to hold the data for each row 
      // SqlCeConn = connection string for db 

      SqlCeCommand cmd = new SqlCeCommand("Table1", SqlCeConn); 
      cmd.CommandType = CommandType.TableDirect; 
      cmd.IndexName = "Column1"; 

      using (SqlCeResultSet rsltSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable)) 
      { 
       if (UpdateRow.Column1> 0) // or != "" if it's string etc 
       { 
        if (rsltSet.Seek(DbSeekOptions.FirstEqual, UpdateRow.Column1)) 
         FoundRecord = true; 
       } 
       rsltSet.Read(); 

       if (FoundRecord) 
       { 
        // Update 
        rsltSet.SetInt32(1, UpdateRow.Column1); 
        rsltSet.SetInt32(2, UpdateRow.Column2); 

        // etc 

        rsltSet.Update(); 
       } 
       else 
       { 
        // Insert new record 
        SqlCeUpdatableRecord record = rsltSet.CreateRecord(); 
        record.SetInt32(0, UpdateRow.Column1); 
        record.SetInt32(1, UpdateRow.Column2); 

        // etc 
        rsltSet.Insert(record, DbInsertOptions.PositionOnInsertedRow); 
       } 
      } 
      cmd.Dispose(); 
     } 
     catch (Exception e) 
     { 
      // Deal with exception 

     }