簡體   English   中英

循環刪除查詢的最佳方法是什么

[英]Whats the best way to loop a delete query

我一直在嘗試根據數量的限制一一刪除幾行,即時通訊試圖只刪除最新的條目,但是,我想出的解決方案總是使VSHOST崩潰,是否有更好的方法來達到相同的結果?

    private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("A apagar dados...");
    bool check = true;
    do
    {
        string connectionString;
        var path = @"C:\Users\Administrator\Desktop\connstring.txt";
        using (StreamReader sr = new StreamReader(path))
        {
            connectionString = sr.ReadLine();
        }

        var connection = new SqlConnection(connectionString);

        string queryString = string.Empty;
        using (SqlConnection deleteconnection = new SqlConnection(connectionString))
        {
            deleteconnection.Open();
            connection.Open();
            queryString = "DELETE FROM wgcdoccab WHERE numdoc = (SELECT MAX(numdoc) FROM WGCDOCCAB WHERE serie ='1' and tipodoc ='FSS' and contribuinte ='999999990' and  datadoc = CONVERT(varchar(10),dateadd(dd, -1, getdate()),120))";
            SqlCommand command = new SqlCommand(queryString, connection);
            command.ExecuteNonQuery();
            connection.Close();
        }
        using (SqlConnection deleteconnection = new SqlConnection(connectionString))
        {
            connection.Open();
            deleteconnection.Open();

            queryString = "SELECT max(numdoc) 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);

該代碼是相對簡單的,並且在操作結束后-變成無休止的cicle,因為它將始終為numdoc返回NULL值,我似乎找不到解決方法。 有什么建議么?

我不了解循環的必要性。 為什么不立即刪除所有記錄?

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

如果您在循環中重復查詢,它將刪除所有這些記錄,而不僅僅是最后一個。

“最后一個”到底是什么意思? 最后2個,最后100個? 您必須給出“最后一個”的確切定義!

假設您要刪除最后10個。 您可以通過以下查詢來實現(假設使用T-SQL):

DELETE FROM wgcdoccab
WHERE numdoc IN (
    SELECT TOP 10 numdoc
    FROM WGCDOCCAB
    WHERE blahh blahh blahh
    ODER BY numdoc DESC
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM