Query Sql Server 能够删除表的最后一行

Posted

技术标签:

【中文标题】Query Sql Server 能够删除表的最后一行【英文标题】:Query Sql Server able to delete the last row of the table 【发布时间】:2021-04-20 08:56:05 【问题描述】:

我想向您公开我的问题:实际上,通过 AJAX 函数我调用了一个服务器端函数,它应该执行一个查询。此查询根据提供的数据删除表中存在相关数据的最后一行。在服务器端函数中,除了查询之外一切正常,它不是删除最后一行,而是删除所有行。谁能告诉我确切的查询?

public static void Contr_Dati(string provin)
    
        string queryString = "DELETE FROM Prov_inser WHERE (SELECT MAX (Province_Inserite) FROM Prov_inser) = @Prov";

        using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["coso"].ConnectionString))
        

            connection.Open();

            using (SqlCommand command = new SqlCommand(queryString, connection))
            
                SqlParameter parameter = new SqlParameter("Prov", provin);
                command.Parameters.Add(parameter);
                command.ExecuteNonQuery();
                connection.Close();

            
        

    

【问题讨论】:

当然可以:您的查询类似于DELETE FROM Prov_inser WHERE 1 = 1(因为 WHERE 子句的结果不取决于给定行中的值)。您的查询指出:如果(SELECT MAX (Province_Inserite) FROM Prov_inser) 的结果等于@Prov,则删除Prov_inser 中的所有行。你只想要DELETE FROM Prov_inser WHERE Province_Inserite = @prov吗? 我尝试 DELETE FROM Prov_inser WHERE Province_Inserite = @Prov 并且它有效,它删除了表中与我插入的数据相同的所有数据。我正在寻找更准确的东西,我希望根据我在输入中输入的内容删除最后输入的数据。例如我输入“Hello”,我想删除输入“Hello”的最后一行。我希望我已经更清楚了。 如果 Province_Inserite 是行 ID,那么您可能需要类似 DELETE FROM Prov_inser WHERE Province_Inserite = (SELECT MAX(Province_Inserite) FROM Prov_inser WHERE /*someconditionhere*/) 的内容。我不太确定这些列代表什么,或者@prov 是什么,所以我真的无能为力。也许您可以编辑您的问题。 @prov 是我在文本区域中从键盘输入的输入。可能我的问题没有很好地表达出来,无论如何还是非常感谢您的建议,非常好心! 【参考方案1】:

如果 @Prov 是表的 Max(key),则您的查询

DELETE FROM Prov_inser WHERE (SELECT MAX (Province_Inserite) FROM Prov_inser) = @Prov

等于

DELETE FROM Prov_inser WHERE 1 = 1

这将删除表中的所有行

================================================ =====================

所以你必须把它改成

DELETE FROM Prov_inser WHERE Province_Inserite = @Prov

或不带参数

DELETE FROM Prov_inser WHERE Province_Inserite = (SELECT MAX(Province_Inserite) FROM Prov_inser)

如果 @Prov 不是键,则必须添加键或时间戳审计字段(例如 Created_Time)来标识表中最后插入的行。

【讨论】:

【参考方案2】:

最接近问题的解决方案是:'DELETE FROM Prov_inser WHERE Province_Inserite = Prov'。但是@prov 不是键,而是输入参数。 Prov_Inser 是表名,Province_Inserite 不是键。

【讨论】:

以上是关于Query Sql Server 能够删除表的最后一行的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 怎样取出最后几条数据

SQL Server 级联

SQL Server 删除表的默认值约束

sql server 2008 删除数据库中所有表的数据

如何在 SQL Server 中查找上次修改表的人?

sql server 删除表及表的相关视图存储过程方法