【发布时间】:2012-01-16 08:03:23
【问题描述】:
select Top(1)* from TableName Where columnName=value
只选择第一行就好了。但是,如果我将选择更改为删除,我会收到错误消息,并且无法弄清楚如何编写查询以仅删除与数据库中的查询匹配的 1 条记录。
我想知道是否有比我更聪明的人知道这是否可以在 SQL CE 中完成或如何完成。
【问题讨论】:
标签: sql sql-server-ce
select Top(1)* from TableName Where columnName=value
只选择第一行就好了。但是,如果我将选择更改为删除,我会收到错误消息,并且无法弄清楚如何编写查询以仅删除与数据库中的查询匹配的 1 条记录。
我想知道是否有比我更聪明的人知道这是否可以在 SQL CE 中完成或如何完成。
【问题讨论】:
标签: sql sql-server-ce
下面的代码只会删除第一行
Dim mySqlCommondDelete As String = "DELETE BOOK_ID, MemberID FROM (SELECT TOP 1 * FROM ISSUE_BOOK) where BOOK_ID = Val(" & deleteBook & ") and MemberID = Val(" & msk & ")"
【讨论】:
不应该是这样吗:
DELETE FROM TableName WHERE columnName=value ORDER BY columnName LIMIT 1;
恕我直言,该表在逻辑上本身没有顺序。它在身体上有它,但你不能依赖它。因此,您必须设置要删除第一行的顺序。
【讨论】:
你可以使用CTE比如
;with myTopRow(rowID)
(
select Top 1 rowID from TableName Where columnName=value
)
delete from TableName inner join myTopRow on TableName.rowID = myTopRow.rowID
【讨论】:
你尝试过这样的事情吗?
DELETE TableName where IdColumn In ( select Top(1) IdColumn from TableName Where columnName=valuev)
【讨论】:
我不知道具体因为我在家,但 SQL CE 被故意限制它可以做什么。原因之一是它“总是”在本地运行到引用它的进程。
这意味着期望其他进程处理大部分可能以其他方式封装在 SQL Server 中的逻辑。这通常会导致在 SQL CE 实例上触发多个查询,而您可能更习惯于触发一个。
在这种情况下,您可以通过两个查询来完成...
1) 用于识别您要删除的记录的查询
2)在另一个查询中使用该标识符进行实际删除
您也可以尝试使用 SET ROWCOUNT 1 将 DELETE 限制为 1 行。但同样,我不知道这是否适用于 CE。
【讨论】: