2015-07-21 7 views
-2

Я пытаюсь удалить все строки, начиная со дна таблицы, используя условие, но когда это условие выполняется, я хочу, чтобы он прекратил обновление таблицы и оставил остальные как это было. Например, если последняя запись в таблице соответствует ему, удалите ее, если она после нее не удовлетворяет условию, а затем остановится и завершите цикл. Вот код, я получил, но его удаление всех строк:Обновление строк в таблице с условием

private void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("A atualizar dados"); 
     bool check = true; 
     do 
     { 
      string connectionString = @"Data Source=.\wintouch;Initial Catalog=bbl;User ID=sa;Password=Pa$$w0rd"; 
      string queryString = string.Empty; 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.Open(); 

       queryString = "DELETE FROM wgcdoccab 
       WHERE serie ='1' AND tipodoc ='FSS' 
       AND contribuinte ='999999990' 
       and datadoc = CONVERT(varchar(10),(dateadd(dd, -2, getdate())),120)" 

       SqlCommand command = new SqlCommand(queryString, connection); 
       //command.Connection.Open(); 
       command.ExecuteNonQuery(); 

      } 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.Open(); 

       queryString = "SELECT * FROM wgcdoccab 
       WHERE serie !='1' and tipodoc !='FSS' 
       and contribuinte !='999999990' 
       and datadoc != CONVERT(varchar(10),(dateadd(dd, -1, getdate())),120) "; 

       using (SqlCommand command = new SqlCommand(queryString, connection)) 
       using (SqlDataReader reader = command.ExecuteReader()) 
       { 
        if (reader.HasRows) 
        { 

         check = true; 

        } 
        else 
        { 
         check = false; 
         MessageBox.Show("Dados Apagados com sucesso"); 
        } 
        command.Connection.Close(); 
       } 
      } 
     } 
     while (check); 
+0

Каковы данные? – HashSu

+0

Если вы имеете в виду значения того, что я хочу обновить, это значение int, например 4 – LesterNotTheMolestor

+0

Его ошибка в редактировании я исправлю – LesterNotTheMolestor

ответ

0

Попробуйте что-то вроде этого примера:

DELETE 
FROM tableName 
WHERE ID > 
(
    SELECT MAX(ID) 
    FROM tableName 
    WHERE condition = false 
) 

Например, если вы хотите удалить, пока значение не будет 4:

DELETE 
FROM tableName 
WHERE ID > 
(
    SELECT MAX(ID) 
    FROM tableName 
    WHERE tableName.Value = 4 
) 

Если строки таблицы являются:

|ID|Value| 
| 1| 7| 
| 2| 4| 

Затем подзапись будет 2, и никакие строки не будут удалены. Однако, если строки являются:

|ID|Value| 
| 1| 7| 
| 2| 4| 
| 3| 9| 
| 4| 1| 

Тогда подзапрос будет возвращать идентификатор 2, а последние 2 строки будут удалены.

+0

Я думал о чем-то подобном, проблема в том, что это решение удалит все строки, которые находятся внутри условия, и я хочу удалить только из нижней строки, пока условие не будет ложным, тогда я хочу прекратить удаление и оставьте остальные оригинальными. Но спасибо – LesterNotTheMolestor

+0

@LesterNotTheMolestor Что вы подразумеваете под «в рамках условия»? Это решение будет «удалять из нижней строки до тех пор, пока условие не станет ложным» –

+0

@LesterNotTheMolestor См. Мое редактирование –

Смежные вопросы