Sql Server CE я могу удалить TOP или только 1 запись из таблицы, которая соответствует моему запросу - PullRequest
1 голос
/ 09 декабря 2011

выберите Top (1) * из TableName, где columnName = значение

, выбирает только первую строку.Однако, если я изменяю выбор на удаление, я получаю ошибку и не могу понять, как написать запрос, чтобы удалить только 1 запись, которая соответствует моему запросу из БД.

Мне интересно, есть ли кто-нибудь умнее, чем я, знаю, или как это можно сделать в SQL CE.

Ответы [ 5 ]

4 голосов
/ 09 декабря 2011

Вы пробовали что-то подобное?

DELETE TableName where IdColumn In ( select Top(1) IdColumn from TableName Where columnName=valuev)
1 голос
/ 09 декабря 2011

Вы можете использовать CTE, например

;with myTopRow(rowID)
(
    select Top 1 rowID from TableName Where columnName=value
)
delete from TableName inner join myTopRow on TableName.rowID = myTopRow.rowID
1 голос
/ 09 декабря 2011

Я не знаю конкретно, как я дома, но SQL CE сознательно ограничен в том, что он может делать.Одна из причин этого заключается в том, что он «всегда» работает локально для процесса, ссылающегося на него.

Это означает, что ожидается, что другой процесс будет обрабатывать большую часть логики, которая в противном случае может быть инкапсулированаSQL Server.Это часто приводит к запуску нескольких запросов в экземпляре SQL CE, где вы можете более привыкнуть к запуску одного.

В этом случае вы можете выполнить это с двумя запросами ...
1) Aзапрос для определения записи, которую вы хотите удалить
2) Используйте этот идентификатор в другом запросе для фактического удаления

Вы также можете попробовать использовать SET ROWCOUNT 1, чтобы ограничить УДАЛЕНИЕ только 1 строкой.Но опять же, я не знаю, работает ли это в CE.

0 голосов
/ 14 октября 2014

Следующий код удалит только первую строку

Dim mySqlCommondDelete As String = "DELETE BOOK_ID, MemberID FROM (SELECT TOP 1 * FROM ISSUE_BOOK) where BOOK_ID = Val(" & deleteBook & ") and MemberID = Val(" & msk & ")"
0 голосов
/ 10 декабря 2011

Не должно ли быть скорее:

DELETE FROM TableName WHERE columnName=value ORDER BY columnName LIMIT 1;

ИМХО, таблица сама по себе НЕ имеет порядка. Он имеет это физически, но вы не можете на это полагаться. Итак, вам нужно установить порядок, в котором вы хотите удалить первую строку.

...