Re: эквивалент "SELECT TOP N"
От: __max  
Дата: 10.05.07 13:37
Оценка: 3 (1)
Здравствуйте, jit, Вы писали:

jit>Пишем большое "базо-независимое" приложение, те. которое работает и на MS SQL, и на MySQL, и даже на MS Access.


jit>По ходу дела естественно сталкивались с ОГРОМНЫМ количеством нюансов (например драйвер mySQL и MS SQL по разному маршалят тип bool и тд. и тп.)


jit>Сейчас столкнулись с очередным багом — синтаксис вот такого запроса — "SELECT TOP 10" — везде разный. В Оракле один (ROWCOUNT), в Мускуле другой (LIMIT 10), в MS SQL третий (TOP 10). .. Как бы так извратиться, чтобы написать эту вещь универсально?


jit>Пока дошли только до такого изврата:


jit>
jit>SELECT *
jit>FROM Users
jit>WHERE UserID > (MAX(UserID)-10)
jit>


jit>Где UserID — первичный ключ. Как вам такой способ? Может еще идеи есть?


1) Надо знать все диалекты...
2) Использовать ORM который умеет работать со всеми вашими СУБД... (если такой существует)
3) Писать хранимые процедуры типа GETSOMETOPROWS(@table_name, @count) и создавать их во время разворачивания окружения (environment) приложения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.