MLT-Coder
Новичок
полный аналог LIMIT в MS SQL Server
суть проблемы в том что алгоритм типа
SELECT * FROM (
SELECT TOP x * FROM (
SELECT TOP x+y * FROM qwe ORDER BY id ASC
) as foo ORDER BY id DESC
) as bar ORDER BY id ASC
не работает если сумма x+y больше чем строк в таблице
пример таблица qwe содержит 4 строки
qwe
---
1
2
3
4
запрос типа
SELECT * FROM qwe LIMIT 3, 2
должен возвратить только одну последнюю строку
к сожалению этого не произойдет если использовать sql код для MS SQL Server-а
запрос
SELECT * FROM (
SELECT TOP 2 * FROM (
SELECT TOP 5 * FROM qwe ORDER BY id ASC
) as foo ORDER BY id DESC
) as bar ORDER BY id ASC
возвращает строки 3 и 4 (что совершенно не желательно)
чтобя все работало така как надо
необходимо уменьшить x на разницу x+y и количества строк в таблице
вот этот sql код каботает абсолютно идентично LIMIT из mysql
DECLARE @lr INT, @lo INT, @lolr INT, @nr INT, @sql nvarchar(1000)
SET @lr = 2
SET @lo = 3
SET @lolr = @lo + @lr
SET @nr = (SELECT COUNT(*) FROM qwe)
if @nr < @lolr SET @lr = @lr - (@lolr - @nr)
if @lr < 0 SET @lr = 0
SET @sql = 'SELECT * FROM (SELECT TOP ' + CAST(@lr AS VARCHAR(10)) + ' * FROM (SELECT TOP ' + CAST(@lolr AS VARCHAR(10)) + ' * from qwe ORDER BY id ASC) subquery1 ORDER BY id DESC) subquery2 ORDER BY id ASC'
EXEC sp_executesql @sql
что скажите на это?
замечания, предложения... может есть другие методы?
суть проблемы в том что алгоритм типа
SELECT * FROM (
SELECT TOP x * FROM (
SELECT TOP x+y * FROM qwe ORDER BY id ASC
) as foo ORDER BY id DESC
) as bar ORDER BY id ASC
не работает если сумма x+y больше чем строк в таблице
пример таблица qwe содержит 4 строки
qwe
---
1
2
3
4
запрос типа
SELECT * FROM qwe LIMIT 3, 2
должен возвратить только одну последнюю строку
к сожалению этого не произойдет если использовать sql код для MS SQL Server-а
запрос
SELECT * FROM (
SELECT TOP 2 * FROM (
SELECT TOP 5 * FROM qwe ORDER BY id ASC
) as foo ORDER BY id DESC
) as bar ORDER BY id ASC
возвращает строки 3 и 4 (что совершенно не желательно)
чтобя все работало така как надо
необходимо уменьшить x на разницу x+y и количества строк в таблице
вот этот sql код каботает абсолютно идентично LIMIT из mysql
DECLARE @lr INT, @lo INT, @lolr INT, @nr INT, @sql nvarchar(1000)
SET @lr = 2
SET @lo = 3
SET @lolr = @lo + @lr
SET @nr = (SELECT COUNT(*) FROM qwe)
if @nr < @lolr SET @lr = @lr - (@lolr - @nr)
if @lr < 0 SET @lr = 0
SET @sql = 'SELECT * FROM (SELECT TOP ' + CAST(@lr AS VARCHAR(10)) + ' * FROM (SELECT TOP ' + CAST(@lolr AS VARCHAR(10)) + ' * from qwe ORDER BY id ASC) subquery1 ORDER BY id DESC) subquery2 ORDER BY id ASC'
EXEC sp_executesql @sql
что скажите на это?
замечания, предложения... может есть другие методы?