- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
select top 1 v.Id
from dbo.Verification v
where v.ApplicationId = a.Id
and v.ResultId = 'D69E0B3A-C5CA-42D0-A8CA-FA7FF63BC414'
and not exists (
select 1 from Verification vo
where vo.ApplicationId = v.ApplicationId
and vo.ResultId = v.ResultId
and vo.Id != v.Id
and vo.Position > v.Position
)
Нераздобанная жопа?
if object_id('tempdb..#tabl') is not null drop table #table
create table #table
(A varchar(20),
B int)
insert into #table (A,B)
VALUES ('Паша', 5);
insert into #table (A,B)
VALUES ('Cаша', 5);
insert into #table (A,B)
VALUES ('Даша', 5);
insert into #table (A,B)
VALUES ('Маша', 5);
select top 1 A from #table
ORDER BY B DESC
select top 1 t.A from #table as t
WHERE not exists (
select top 1 t1.A from #table as t1
WHERE t1.B > t.B
)
У меня вывелось (проверял на 2003-ем):
Саша
Паша
В чем прикол?
А в первом случае СУБД сначала сортирует всю таблицу. Я догадываюсь, что сортировать массив одинаковых значений не полезнее, чем носить воду в решете, но тупая машина может этого не знать и перемешать таблицу. Потому и выводит не первую строку, а случайную.
И еще одна фигня, при top 4 он как раз вывел таблицу в обратном порядке
> при top 4 он как раз вывел таблицу в обратном порядке
Если нет order by - СУБД имеет полное право вывести записи в любом порядке. К сожалению, зачастую, она выводит их в порядке вставки, и люди считают, что order by лишний.
Так что либо добавляй еще колонок в order, либо получай недетерминированный выхлоп.
простите, совпали с чем?
Я криво выразился, наверное... Примерно так: Все пятёрки гарантированно идут после четверок. Но вот порядок записей среди этой группы пятёрок не определен, если еще чего-нибудь не добавить в order. Вот это я имел в виду.
Если СУБД в него умеет и его создали...
> многое зависит от плана запроса
Ну вот и я о том же. Нет ордера - никаких гарантий.
иначе ни ACID, ни роллбек не сделать
т.к. тебе так или иначе необходимо знать физический адрес записи - в каком файле/блоке/по какому смещению он лежит - хотя бы для того, чтобы нормальный индекс строить
судя по http://stackoverflow.com/a/7538103, mssql тупо не даёт штатного документированного механизма получить это значение пользователю, а что даёт - затем не использует преимущество прямого обращения по заданному адресу (а ведь это самый быстрый способ достать строку из бд)
Оракл, M$$QL, постгрес и мускуль - не СУБД. Ок.
> проблема с доступом из нескольких процессов
> тормозные коммиты
Это, имхо, судьба любой СУБД на основе расшаренного файла.
Но у access, кстати говоря есть возможность настроить синхронизацию через odbc с реальной таблицей, и человек, который более или менее вменяемый, сможет напрямую редактировать эти записи через gui, и даже вставлять их напрямую из excel, что удобно.
http://ideone.com/Jly6kW
Access-е штолле?