2012-09-23 37 views
7

Làm cách nào để có thể INSERT một hàng nếu chưa tồn tại trong bảng cơ sở dữ liệu SQL Server CE và UPDATE nếu nó tồn tại?SQL Server CE: nếu có cập nhật khác, hãy chèn

Tôi đã thử nhiều truy vấn SQL và tiếp tục gặp lỗi. Đây không phải là làm việc.

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

Cập nhật:

Tôi đã thấy điều này mà đang làm việc cho tôi. Bất kỳ đề nghị tốt khác được chào đón.

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

Bạn có mong đợi bất kỳ khả năng nào đồng thời hoặc là cơ sở dữ liệu này cho một ứng dụng người dùng đơn lẻ không? –

+0

@MartinSmith, Đây là một ứng dụng dành cho thiết bị di động dành cho người dùng. – user960567

+0

Xem thêm: http://stackoverflow.com/questions/728373/performing-insert-or-update-upsert-on-sql-server-compact-edition – Seph

Trả lời

2

Tôi biết bạn đã gắn thẻ sql và sql-server-ce nhưng trong trường hợp bạn đang mở để sử dụng C# code để sửa lỗi này ..:

Sử dụng C# và kết quả là bộ này là những gì tôi đã làm cho ứng dụng di động của tôi sử dụng SQL CE:

  // 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 

     } 
Các vấn đề liên quan