【发布时间】:2017-07-06 11:56:33
【问题描述】:
我想删除特定列上值最高的行
(我知道有答案,但由于某种原因,它们都不适合我)
我在 Visual Studio C# 中使用 SQL 进行的所有编码
我的数据库:小时
Hours_Left | Hours_Spent | Time_Written | Mode | Time_Start | Time_End | Index
==============================================================================
aa | bb | cc | dd | ee | ff | 3
gg | hh | ii | jj | kk | ll | 4
mm | nn | oo | pp | qq | rr | 5
ss | tt | uu | vv | ww | xx | 6
[Hours_Left] VARCHAR (MAX) NULL,
[Hours_Spent] VARCHAR (MAX) NULL,
[Time_Written] VARCHAR (MAX) NULL,
[Mode] VARCHAR (MAX) NULL,
[Time_Start] VARCHAR (MAX) NULL,
[Time_End] VARCHAR (MAX) NULL,
[Index] INT IDENTITY (1, 1) NOT NULL
我的代码:
if (con.State != ConnectionState.Open)
{
con.Close();
con.Open();
}
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = @"DELETE FROM hours WHERE Index = select max(Index) from hours limit 1";
cmd.ExecuteNonQuery();
con.Close();
Display_Data();
commandText 时也不工作
@"DELETE TOP(1) FROM hours
WHERE Index in
(SELECT TOP(1) Index FROM hours
ORDER BY Index DESC);";
我想删除最高索引的整行 - 即删除索引为 6 的行,它是最高索引
错误:
cmd.ExecuteNonQuery();
错误是:
System.Data.SqlClient.SqlException:''索引'附近的语法不正确。如果 这旨在作为表提示的一部分,一个 WITH 关键字和 现在需要括号。请参阅 SQL Server 联机丛书了解正确的 语法。
【问题讨论】:
-
DELETE FROM hours WHERE [Index] IN (select max([Index]) from hours) -
通常将索引命名为
%TableName%Id。在您的情况下,它将是HourId。因此,您将来会避免此类问题。 -
与问题无关,但为什么所有其他列都是 varchar(max)?
-
@MadMyche 我不知道,我需要一个字符串但文本出现问题
标签: c# sql sql-server sql-delete