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 能够删除表的最后一行的主要内容,如果未能解决你的问题,请参考以下文章