Как реализовать LIMIT с SQL Server?
У меня есть этот запрос с MySQL:
select * from table1 LIMIT 10,20
Как я могу сделать это с SQL Server?
sql sql-server migrationПоделиться Источник Bigballs 02 марта 2009 в 19:54
18 ответов
- Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005
Возможный Дубликат : Эквивалент LIMIT и OFFSET для SQL Server? Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005, я вижу mysql, oracle, sqllite, postgre есть, microsoft не понимает, что нам это нужно ?
- SQL Server TSQL эквивалентно ‘MySQL Limit’?
Я знаю, что у MySQL есть команда limit, но я не знаю, какую команду я должен использовать в SQL server 2008? Мне нужно выбрать clientId и последний день каждого пикапа, большинство клиентов имеют несколько пикапов (65 000 + записей в таблице пикапов).
136
Начиная с SQL SERVER 2005, вы можете сделать это…
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 10 AND 20;
или что-то вроде этого для версий 2000 и ниже…
SELECT TOP 10 * FROM (SELECT TOP 20 FROM Table ORDER BY Id) ORDER BY Id DESC
Поделиться Leon Tayson 02 марта 2009 в 20:00
61
Неуклюже, но это сработает.
SELECT TOP 10 * FROM table WHERE id NOT IN (SELECT TOP 10 id FROM table ORDER BY id) FROM table ORDER BY id
упущение MSSQL пункта LIMIT является преступным, IMO. Вам не нужно делать такого рода обходные пути.
Поделиться ceejayoz 02 марта 2009 в 19:58
42
Начиная с SQL SERVER 2012, вы можете использовать предложение OFFSET FETCH:
USE AdventureWorks;
GO
SELECT SalesOrderID, OrderDate
FROM Sales.SalesOrderHeader
ORDER BY SalesOrderID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
GO
http://msdn.microsoft.com/en-us/ library/ms188385(v=sql.110).aspx
Это может работать неправильно, если заказ по не является уникальным.
Если запрос изменен на ПОРЯДОК OrderDate, возвращаемый результирующий набор не соответствует ожидаемому.
Поделиться user4047259
18
Это почти дубликат вопроса, который я задал в октябре: Эмулировать предложение MySQL LIMIT в Microsoft SQL Server 2000
Если вы используете Microsoft SQL Server 2000, хорошего решения не существует. Большинству людей приходится прибегать к записи результата запроса во временную таблицу с первичным ключом IDENTITY
. Затем выполните запрос к столбцу первичного ключа, используя условие BETWEEN
.
Если вы используете Microsoft SQL Server 2005 или более позднюю версию, у вас есть функция ROW_NUMBER()
, поэтому вы можете получить тот же результат, но избежать временной таблицы.
SELECT t1.*
FROM (
SELECT ROW_NUMBER OVER(ORDER BY id) AS row, t1.*
FROM ( ...original SQL query... ) t1
) t2
WHERE t2.row BETWEEN @offset+1 AND @offset+@count;
Вы также можете записать это как общее табличное выражение , как показано в ответе @Leon Tayson .
Поделиться Bill Karwin 02 марта 2009 в 20:04
18
Вот как я ограничиваю результаты в MS SQL Server 2012:
SELECT *
FROM table1
ORDER BY columnName
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
NOTE: OFFSET
можно использовать только с ORDER BY
или в тандеме с ним .
Чтобы объяснить строку кода OFFSET xx ROWS FETCH NEXT yy ROW ONLY
xx
-это номер записи/строки, который вы хотите начать извлекать из таблицы, т. Е.: если в таблице 1 40 записей, приведенный выше код начнет извлекать из строки 10.
yy
— это количество записей/строк, которые вы хотите извлечь из таблицы.
Чтобы построить на предыдущем примере: если таблица 1 содержит 40 записей, и вы начали вытягивать из строки 10 и захватили набор NEXT из 10 (
).
Это означало бы, что приведенный выше код будет извлекать записи из таблицы 1, начиная со строки 10 и заканчивая строкой 20. При этом вытягивают ряды 10 — 20.
Проверьте ссылку для получения дополнительной информации о OFFSET
Поделиться Jeremy 19 мая 2016 в 14:19
- SQL server 2008 не поддерживает LIMIT
Я пытаюсь использовать LIMIT в SQL server 2008, но он не работает, что я могу сделать, я новичок в SQL я использовал mySQL раньше. Вот запрос SQL, который я пытаюсь выполнить: SELECT * FROM konto WHERE id_e_klientit = 9 ORDER BY koha_relizimit DESC LIMIT 1
- Использование limit() на Select в ZF2 с SQL Server
e: просто понял, что это может иметь какое-то отношение к тому факту, что это SQL Server. Кто-нибудь знает ZF2, эквивалентный LIMIT для SQL Server? Всем привет, застрял с ZF2, как всегда. У меня есть метод fetchAll() в классе, который выбирает строки из определенной таблицы. Теперь этот метод…
12
SELECT *
FROM (
SELECT TOP 20
t.*, ROW_NUMBER() OVER (ORDER BY field1) AS rn
FROM table1 t
ORDER BY
field1
) t
WHERE rn > 10
Поделиться Quassnoi 02 марта 2009 в 20:05
9
Синтаксически запрос MySQL LIMIT выглядит примерно так:
SELECT * FROM table LIMIT OFFSET, ROW_COUNT
Это может быть переведено на Microsoft SQL Server как
SELECT * FROM
(
SELECT TOP #{OFFSET+ROW_COUNT} *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum
FROM table
) a
WHERE rnum > OFFSET
Теперь ваш запрос select * from table1 LIMIT 10,20
будет выглядеть следующим образом:
SELECT * FROM
(
SELECT TOP 30 *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rnum
FROM table1
) a
WHERE rnum > 10
Поделиться Unknown 06 марта 2012 в 12:13
Поделиться Ólafur Waage 02 марта 2009 в 19:56
2
Это одна из причин, по которой я стараюсь избегать использования MS Server… но все равно. Иногда у вас просто нет выбора (да! и мне приходится использовать устаревшую версию!!).
Мое предложение состоит в том, чтобы создать виртуальную таблицу:
От:
SELECT * FROM table
К:
CREATE VIEW v_table AS
SELECT ROW_NUMBER() OVER (ORDER BY table_key) AS row,* FROM table
Тогда просто запросите:
SELECT * FROM v_table WHERE row BETWEEN 10 AND 20
При добавлении или удалении полей «row» обновляется автоматически.
Основная проблема с этой опцией заключается в том, что порядок ПО фиксирован. Поэтому, если вы хотите другой порядок, вам придется создать другое представление.
UPDATE
В этом подходе есть еще одна проблема: если вы попытаетесь отфильтровать свои данные, они не будут работать должным образом. Например, если вы это сделаете:
SELECT * FROM v_table WHERE field = 'test' AND row BETWEEN 10 AND 20
WHERE ограничивается теми данными, которые находятся в строках между 10 и 20 (вместо поиска по всему набору данных и ограничения выходных данных).
Поделиться lepe 17 апреля 2014 в 03:10
Это многоступенчатый подход, который будет работать в SQL2000.
-- Create a temp table to hold the data
CREATE TABLE #foo(rowID int identity(1, 1), myOtherColumns)
INSERT INTO #foo (myColumns) SELECT myData order By MyCriteria
Select * FROM #foo where rowID > 10
Поделиться souLTower 02 марта 2009 в 20:09
1
SELECT
*
FROM
(
SELECT
top 20 -- ($a) number of records to show
*
FROM
(
SELECT
top 29 -- ($b) last record position
*
FROM
table -- replace this for table name (i.e. "Customer")
ORDER BY
2 ASC
) AS tbl1
ORDER BY
2 DESC
) AS tbl2
ORDER BY
2 ASC;
-- Examples:
-- Show 5 records from position 5:
-- $a = 5;
-- $b = (5 + 5) - 1
-- $b = 9;
-- Show 10 records from position 4:
-- $a = 10;
-- $b = (10 + 4) - 1
-- $b = 13;
-- To calculate $b:
-- $b = ($a + position) - 1
-- For the present exercise we need to:
-- Show 20 records from position 10:
-- $a = 20;
-- $b = (20 + 10) - 1
-- $b = 29;
Поделиться Julian Moreno 28 февраля 2013 в 15:28
1
Надо попытаться. В приведенном ниже запросе вы можете увидеть группировку по, порядок по, Пропуск строк и ограничение строк.
select emp_no , sum(salary_amount) from emp_salary
Group by emp_no
ORDER BY emp_no
OFFSET 5 ROWS -- Skip first 5
FETCH NEXT 10 ROWS ONLY; -- limit to retrieve next 10 row after skiping rows
Поделиться M Danish
0
Если ваш ID является уникальным типом идентификатора или ваш идентификатор в таблице не отсортирован, вы должны сделать так, как показано ниже.
select * from
(select ROW_NUMBER() OVER (ORDER BY (select 0)) AS RowNumber,* from table1) a
where a.RowNumber between 2 and 5
Код будет
select * from limit 2,5
Поделиться user3244012 11 октября 2018 в 05:29
0
В SQL нет ключевого слова LIMIT. Если вам нужно только ограниченное количество строк, вы должны использовать ключевое слово TOP, которое похоже на LIMIT.
Поделиться Mitul Panchal 23 января 2018 в 05:04
0
лучше использовать это в MSSQLExpress 2017 году.
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) as [Count], * FROM table1
) as a
WHERE [Count] BETWEEN 10 and 20;
—Предоставление столбца [Count] и присвоение каждой строке уникального подсчета без заказа чего-либо, а затем повторный выбор снова, где вы можете предоставить свои ограничения.. 🙂
Поделиться user1308314 09 августа 2019 в 01:54
0
Подход
MYSQL:
SELECT 'filds' FROM 'table' WHERE 'where' LIMIT 'offset','per_page'
MSSQL:
SELECT 'filds' FROM 'table' WHERE 'where' ORDER BY 'any' OFFSET 'offset'
ROWS FETCH NEXT 'per_page' ROWS ONLY
Заказ ПО является обязательным
Поделиться Turendu 03 февраля 2020 в 13:08
0
Один из возможных способов получить результат , как показано ниже, надеюсь, что это поможет.
declare @start int
declare @end int
SET @start = '5000'; -- 0 , 5000 ,
SET @end = '10000'; -- 5001, 10001
SELECT * FROM (
SELECT TABLE_NAME,TABLE_TYPE, ROW_NUMBER() OVER (ORDER BY TABLE_NAME) as row FROM information_schema.tables
) a WHERE a.row > @start and a.row <= @end
Поделиться Pragnesh Karia 14 декабря 2019 в 10:55
-2
Если я правильно помню (прошло некоторое время с тех пор, как я использовал SQL Server), вы можете использовать что-то вроде этого: (2005 и выше)
SELECT
*
,ROW_NUMBER() OVER(ORDER BY SomeFields) AS [RowNum]
FROM SomeTable
WHERE RowNum BETWEEN 10 AND 20
Поделиться Kris 02 марта 2009 в 20:02
Похожие вопросы:
Как написать (MySQL) «LIMIT» в SQL Server?
У меня есть проблема, когда я пытаюсь изменить запрос с LIMIT с MYSQL на SQL-Server. Проверьте это : SELECT * FROM tableEating WHERE person = ‘$identity’ LIMIT 1; Я пытался изменить его с помощью…
Lib для LIMIT заявления в SQL SERVER?
Есть ли какая-то lib или функция, которую я могу использовать, чтобы взять мой базовый оператор sql и преобразовать оператор limit в совместимый оператор sql server?
Как я могу сделать MySQL LIMIT в SQL Server?
Я извлекаю тысячи данных из базы данных. Я хотел бы показать на веб-страницах лимит в 100 записей. Я могу показать первую запись 100 со следующим SQL: SELECT TOP 100 * FROM TBLStock И как я могу…
Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005
Возможный Дубликат : Эквивалент LIMIT и OFFSET для SQL Server? Как использовать LIMIT [X] OFFSET [Y] с SQL Server 2005, я вижу mysql, oracle, sqllite, postgre есть, microsoft не понимает, что нам…
SQL Server TSQL эквивалентно ‘MySQL Limit’?
Я знаю, что у MySQL есть команда limit, но я не знаю, какую команду я должен использовать в SQL server 2008? Мне нужно выбрать clientId и последний день каждого пикапа, большинство клиентов имеют…
SQL server 2008 не поддерживает LIMIT
Я пытаюсь использовать LIMIT в SQL server 2008, но он не работает, что я могу сделать, я новичок в SQL я использовал mySQL раньше. Вот запрос SQL, который я пытаюсь выполнить: SELECT * FROM konto…
Использование limit() на Select в ZF2 с SQL Server
e: просто понял, что это может иметь какое-то отношение к тому факту, что это SQL Server. Кто-нибудь знает ZF2, эквивалентный LIMIT для SQL Server? Всем привет, застрял с ZF2, как всегда. У меня…
Разве LIMIT не допускается в sql server 2008?
У меня есть вопрос SELECT employeedept, execoffice_status, employee, COUNT(*) AS ’employeetotal’, YEAR_cse1 =YEAR(execoffice_date) FROM CSEReduxResponses WHERE execoffice_status = 1 GROUP BY…
Как использовать limit в Microsoft SQL Server 2008?
Мы должны использовать ключевое слово Limit в SQL server 2008/2012. Нам нужно применить ограничение для каждого запроса, где начальный индекс будет меняться каждый раз. Когда я гуглил, нашел TOP, но…
SQL Server LIMIT 1 и LIMIT 1,1 синтаксическая ошибка
Интересно, что я не нашел никакого сообщения по этому конкретному, но основному вопросу. Цель: обновить последнюю запись budgetid docstatus = 0. Затем я хочу обновить запись next-to-last budgetid…
Оператор SQL LIMIT: синтаксис, примеры
Оператор SQL LIMIT позволяет вывести указанное число строк из таблицы. Оператор SQL LIMIT записывается всегда в конце запроса.
Используется в СУБД MySQL. Аналогом в MS SQL Server является оператор SQL TOP.
Оператор LIMIT имеет следующий синтаксис:
LIMIT first_row [, last_row]
Оператор SQL LIMIT выводит то количество записей, которое указано в параметре first_row. Если, через запятую указано значение параметра last_row, то будут выведены строки в диапазоне first_row — last_row включительно.
Примеры оператора SQL LIMIT: Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1. С использованием оператора SQL LIMIT вывести первые 2 записи таблицы:
SELECT * FROM Universities LIMIT 2
Результат:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
Пример 2. С использованием оператора SQL LIMIT вывести названия университетов из таблицы с 4 по 6:
SELECT UniversityName FROM Universities LIMIT 4, 6
Результат:
UniversityName |
Moscow State University |
Higher School of Economics |
Ural Federal University |
SQL оператор SELECT LIMIT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном материале вы узнаете, как использовать оператор SELECT LIMIT в SQL, с синтаксисом и примерами.
Описание
SQL оператор SELECT LIMIT используется для извлечения записей из одной или нескольких таблиц в базе данных и ограничения количества возвращаемых записей на основании предельного значения.
Подсказка: SELECT LIMIT поддерживается не во всех базах данных SQL.
Для баз данных, таких как SQL Server или MSAccess, используйте оператор SELECT TOP, чтобы ограничить свои результаты. Оператор SELECT TOP является патентованным эквивалентом оператора SELECT LIMIT.
Синтаксис
Синтаксис для оператора SELECT LIMIT в SQL.
SELECT expressions
FROM tables
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
LIMIT number_rows [ OFFSET offset_value ];
Параметры или аргумент
- expressions
- Столбцы или расчеты, которые вы хотите получить
- tables
- Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица
- WHERE conditions
- Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны
- ORDER BY expression
- Необязательный. Он используется в операторе SELECT LIMIT, чтобы вы могли упорядочить результаты и выбрать те записи, которые вы хотите вернуть. ASC — возрастающий порядок, а DESC — убывающий
- LIMIT number_rows
- Он указывает ограниченное количество строк в наборе результатов, которые должны быть возвращены на основе number_rows. Например, LIMIT 10 вернет первые 10 строк, соответствующих критериям SELECT. Именно здесь важен порядок сортировки, поэтому обязательно используйте предложение ORDER BY соответствующим образом
- OFFSET offset_value
- Необязательный. Первая строка, возвращаемая LIMIT, будет определена offset_value
Пример — использование ключевого слова LIMIT
Давайте посмотрим, как использовать оператор SELECT с опцией LIMIT в SQL.
Например.
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5;
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5; |
В этом SQL примере SELECT LIMIT будут выбраны первые 5 записей из таблицы contacts, где website — ‘Google.com’. Обратите внимание, что результаты сортируются по contact_id в порядке убывания, поэтому это означает, что 5 самых максимальных значений contact_id будут возвращены оператором SELECT LIMIT.
Если в таблице contacts есть другие записи со значением website ‘Google.com’, они не будут возвращены оператором SELECT LIMIT в SQL.
Если бы мы хотели выбрать 5 самых минимальных значений contact_id вместо самых максимальных, мы могли бы изменить порядок сортировки следующим образом.
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id ASC LIMIT 5;
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id ASC LIMIT 5; |
Теперь результаты будут отсортированы по contact_id в порядке возрастания, поэтому первые 5 самых минимальных записей contact_id, которые имеют website — ‘Google.com’, будут возвращены этим запросом SELECT LIMIT. Никакие другие записи не будут возвращены этим запросом.
Пример — использование ключевого слова OFFSE
Ключевое слово offset позволяет сместить первую запись, возвращаемую предложением LIMIT. Например.
Это предложение LIMIT вернет 3 записи в наборе результатов со смещением 1. Это означает, что оператор SELECT пропустит первую запись, которая обычно будет возвращена, и вместо этого вернет вторую, третью и четвертую записи.
Давайте посмотрим, как использовать оператор SELECT LIMIT с предложением OFFSET в SQL.
Например.
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5 OFFSET 2;
SELECT contact_id, last_name, first_name FROM contacts WHERE website = ‘Google.com’ ORDER BY contact_id DESC LIMIT 5 OFFSET 2; |
В этом SQL примере SELECT LIMIT используется OFFSET, равный 2, что означает, что первая и вторая записи в наборе результатов будут пропущены … и затем будут возвращены следующие 5 строк.
Особенности ограничения памяти SQL Server и что изменилось в SQL Server 2016
Есть несколько вариантов ограничения памяти, некоторые настраиваем мы, а не которые устанавливает Microsoft.
Ограничение памяти редакцией SQL Server
Поговорим сначала о том, что изменить нам не представляется возможным, а именно ограничение памяти на редакцию SQL Server. От версии к версии эти пороги меняются, сегодня я хотел бы остановиться на SQL Server 2014, остальные версии можно посмотреть тут.
Имя функции | Enterprise | Business Intelligence | Standard Edition | Express |
Максимальный объем используемой памяти | MAX | 64 ГБ | 64 ГБ | 1 ГБ |
Как мы видим, для нагруженных решений, редакции Standard будет недостаточно, а Enterprise стоит значительно больше (в среднем в 4 раза больше если сравнивать лицензии на ядра).
Ограничение памяти экземпляру SQL Server
Теперь перейдём к ограничению на которое мы можем повлиять, а именно к параметру экземпляра max server memory. Данный параметр ограничивает память выделяемую для экземпляра, но охватывает не весь её объём. Max server memory ограничивает только баффер пул (далее buffer pool), если не вдаваться в детали, то buffer pool это область памяти SQL Server отвечающая за весь кэш страниц данных и индексов. Остальная часть кэша (процедурный, backup, для поддержки dll и тд) используется вне buffer pool. Память управляется клерками памяти, посмотреть все их виды и используемые ими ресурсы можно тут. Именно по этой причине вы могли видеть что экземпляр часто съедает больше памяти чем мы выставили в max server memory.
max server memory может быть изменён 2 способами:- С помощью T-SQL команд
— Сначала включаем возможность расширенного изменения конфигурации SQL Server sp_configure ‘show advanced option’, 1 RECONFIGURE GO — Устанавливаем максимальное количество оперативной памяти для buffer pool в 2048 sp_configure ‘max server memroy’, 2048 RECONFIGURE
— Сначала включаем возможность расширенного изменения конфигурации SQL Server sp_configure ‘show advanced option’, 1 RECONFIGURE
GO
— Устанавливаем максимальное количество оперативной памяти для buffer pool в 2048 sp_configure ‘max server memroy’, 2048 RECONFIGURE |
2. С помощью SQL Server Management Studion:
Правая кнопка мышки на сервере > Свойства > раздел Память > указать в разделе max server memory нужное значение > ОК
Ограничение памяти с помощью Регулятора Ресурсов
Так же у нас есть возможность опуститься ещё на 1 уровень ниже и ограничить память для конкретных подключений с помощью Регулятора Ресурсов (Resource Governor). В данном компоненте создаются пулы ресурсов, группы рабочих нагрузок и функция распределения подключений по группам рабочих нагрузок (подробнее здесь). С помощью Resource Governor мы можем разделить ресурсы экземпляра SQL Server на группы и раздать эти группы, по определённой логике, разным пользователям. Данный функционал доступен только в Enterprise Edition.
Особенности определения реально используемой памяти SQL Server
Понять сколько использует памяти SQL Server можно с помощью диспетчера задач, но если у вас на сервере включена ‘блокировка страниц в памяти’, то данный способ не покажет реальной картины. В таком случае, чтобы посмотреть количество используемой памяти вам потребуется обратиться к счётчикам производительности или написать запрос к представлению sys.dm_os_performance_counters:
- Запрос будет выглядеть следующим образом
SELECT cntr_value/1024 as memory FROM sys.dm_os_performance_counters WHERE counter_name like ‘%Total Server Memory%’
SELECT cntr_value/1024 as memory FROM sys.dm_os_performance_counters WHERE counter_name like ‘%Total Server Memory%’ |
2. Счётчик производительности можно найти в Performance Monitor — SQL Server:Memory Manager\Total Server Memory (KB)
Новое поведение ограничения памяти в SQL Server 2016
Память под In-Memory OLTP и колоночные индексы в памяти выделяется не из buffer pool, а через другие клерки, по этой причине ограничение max server memory на данные компоненты не подействует. В SQL Server 2016 были добавлены следующие лимиты:
Обратите внимание, что лимит для колоночных индексов в памяти указан для всего экземпляра, а для In-Memory OLTP в рамках одной БД.
Как и в предыдущих версиях SQL Server нет никаких других ограничений по памяти кроме как для buffer pool (max server memory), In-Memory OLTP и колоночных индексов в памяти. Остальные клерки памяти так же могут использовать ресурсы сверх ожидаемых.
Пример: SQL Server Standard Edition имеет ограничение buffer pool в 128 Гб оперативной памяти (ограничение редакции), то есть для страниц данных и индексов максимальный лимит 128 Гб. Начиная с SQL Server 2016 Sp1 вы можете дополнительно использовать 32 Гб памяти для колоночных индексов в памяти и 32 Гб для In-Memory OLTP (для каждой БД), плюс память, используемая другими клерками.
Вконтакте
Google+
Оператор SQL: LIMIT. — it-black.ru
Оператор LIMIT позволяет вывести указанное число строк из таблицы. Оператор записывается всегда в конце запроса. LIMIT – это аналог оператора TOP.
// Синтаксис оператора LIMIT first_row [, last_row]
Оператор LIMIT выводит то количество записей, которое указано в параметре first_row. Если, через запятую указано значение параметра last_row, то будут выведены строки в диапазоне first_row — last_row включительно.
Примеры оператора. Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1. С использованием оператора LIMIT вывести названия университетов из таблицы с 4 по 6:
SELECT UniversityName FROM Universities LIMIT 3, 3;
Результат:
UniversityName |
Moscow State University |
Higher School of Economics |
Ural Federal University |
Пример 2. С использованием оператора LIMIT вывести первые 2 записи таблицы:
SELECT * FROM Universities LIMIT 2;
Результат:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
Видео по оператору:
Изменение параметров использования памяти MS SQL Server 2012
В данной статье будет рассмотрена закладка «Память» (Memory) окна настройки параметров MS SQL Server 2012 (справедливо и для MS SQL Server 2008 (R2)). На данной закладке можно указать лимиты использования памяти SQL Server 2012, а также задать размер памяти для запроса и для создания индекса.
Запускаем утилиту «SQL Server Management Studio». В Microsoft Windows server 2012 R2 ее можно найти в списке всех программ.
В Microsoft Windows Server 2008 R2 в меню «Пуск» (Start) — «Microsoft SQL Server 2012» — «Среда SQL Server Management Studio».
Вводим имя экземпляра сервера, данные для авторизации и нажимаем «Соединить» (Connect).
В окне справа, в обозревателе объектов, кликаем правой кнопкой мыши по верхнему узлу дерева, содержащую строку соединения с сервером, и в контекстном меню выбираем «Свойства» (Properties).
В открывшемся окне «Свойства сервера» (Server Properties) переходим на вкладку «Память» (Memory), на которой доступны для изменения следующие параметры:
- Минимальный размер памяти сервера (Minimum server memory) — Указывает минимальный размер оперативной памяти в мегабайтах, который будет выделен при запуске SQL Server и не будет в дальнейшем уменьшаться. Следует задавать такое значение, чтобы SQL Server не мешал работе операционной системы и программ, работающих на данном компьютере.
- Максимальный размер памяти сервера (Maximum server memory) — Максимальный объем оперативной памяти в мегабайтах, который может использовать SQL Server во время работы. Устанавливать данный параметр имеет смысл если известно, что одновременно с SQL Server будет запущено несколько других приложений, которые используют весь объем памяти, доступный в момент запуска и не запрашивают ее дополнительно (т. е. не запрашивают память при необходимости). В этом случае необходимо установить такое значение максимального размера памяти сервера, при котором обеспечивается необходимый для приложения объем памяти, не занимаемый SQL Server. Минимальный объем памяти, который можно установить для данного параметра равен 64 мегабайтам для 32-разрядных систем и 128 МБ для 64-разрядных систем.
- Память для создания индекса (Index creation memory) — Устанавливает объем памяти в килобайтах, который используется во время операции сортировки при создании индекса. Значение по умолчанию, равное 0, соответствует динамическому распределению, которое можно использовать в большинстве случаев без дальнейшей настройки. Значения задаются в диапазоне от 704 до 2 147 483 647.
- Минимальный объем памяти для запроса (Minimum memory per query) — Устанавливает объем памяти в килобайтах, выделяемый для выполнения запроса. Возможно задать значение в диапазоне от 512 до 2 147 483 647 килобайт. Значение по умолчанию — 1024.
Введя необходимые параметры, нажимаем «ОК» для сохранения изменений.
Для того, чтобы просмотреть, вступили ли в силу внесенные изменения, заново откроем окно «Свойства сервера» (Server Properties) на вкладке «Память» (Memory) и установим переключатель, располагающийся внизу формы, в значение «Текущие значения» (Running values).
Если текущие значения остались прежними, значит требуется перезапуск экземпляра SQL server.
Смотрите также:
- Удаление компонент MS SQL Server 2012
Может случиться так, что в процессе установки MS SQL Server 2012 были установлены компоненты, необходимость в которых со временем отпала (или были установлены по ошибке). В этом случае, в целях…
- Лицензирование MS SQL Server 2012
В данной статье будут рассмотрены способы лицензирования Microsoft SQL Server 2012. Будет приведен краткий обзор каждого из способов лицензирования, а также указаны возможные варианты лицензирования для различных выпусков MS SQL Server…
- Редакции MS SQL Server 2012
Ниже приводится список существующих редакций Microsoft SQL Server 2012, а также приводится краткий обзор каждой из них. Microsoft SQL Server 2012 предлагается в нескольких специально разработанных редакциях:…
SQL: оператор SELECT LIMIT
В этом руководстве по SQL объясняется, как использовать оператор SELECT LIMIT в SQL с синтаксисом и примерами.
Описание
Оператор SQL SELECT LIMIT используется для извлечения записей из одной или нескольких таблиц в базе данных и ограничения количества возвращаемых записей на основе предельного значения.
СОВЕТ: SELECT LIMIT поддерживается не во всех базах данных SQL.
Для таких баз данных, как SQL Server или MSAccess, используйте оператор SELECT TOP, чтобы ограничить результаты.Оператор SELECT TOP является проприетарным эквивалентом оператора SELECT LIMIT от Microsoft.
Синтаксис
Синтаксис оператора SELECT LIMIT в SQL:
выражения SELECT ИЗ столов [ГДЕ условия] [ORDER BY выражение [ASC | DESC]] LIMIT number_rows [OFFSET offset_value];
Параметры или аргументы
- выражений
- Столбцы или вычисления, которые вы хотите получить.
- столов
- Таблицы, из которых вы хотите получить записи.В предложении FROM должна быть хотя бы одна таблица.
- ГДЕ условия
- Необязательно. Условия, которые должны быть выполнены для выбора записей.
- ORDER BY выражение
- Необязательно. Он используется в операторе SELECT LIMIT, чтобы вы могли упорядочить результаты и выбрать те записи, которые хотите вернуть. ASC — это возрастающий порядок, а DESC — убывающий.
- LIMIT number_rows
- Он определяет ограниченное количество строк в результирующем наборе, которое должно быть возвращено, на основе number_rows .Например, LIMIT 10 вернет первые 10 строк, соответствующих критериям SELECT. Здесь порядок сортировки имеет значение, поэтому обязательно используйте предложение ORDER BY соответствующим образом.
- OFFSET offset_value
- Необязательно. Первая строка, возвращаемая LIMIT, будет определяться значением offset_value .
Пример — использование ключевого слова LIMIT
Давайте посмотрим, как использовать оператор SELECT с предложением LIMIT в SQL.
Например:
ВЫБЕРИТЕ contact_id, last_name, first_name ИЗ контактов ГДЕ веб-сайт = 'TechOnTheNet.com ' ЗАКАЗАТЬ ПО contact_id DESC LIMIT 5;
В этом примере SQL SELECT LIMIT будут выбраны первые 5 записей из таблицы контактов , где веб-сайт — «TechOnTheNet.com». Обратите внимание, что результаты отсортированы по contact_id в порядке убывания, поэтому это означает, что оператор SELECT LIMIT будет возвращать 5 наибольших значений contact_id .
Если в таблице контактов есть другие записи, у которых для веб-сайта указано значение ‘TechOnTheNet.com ‘, они не будут возвращены оператором SELECT LIMIT в SQL.
Если бы мы хотели выбрать 5 наименьших значений contact_id вместо наибольших, мы могли бы изменить порядок сортировки следующим образом:
ВЫБЕРИТЕ contact_id, last_name, first_name ИЗ контактов ГДЕ веб-сайт = 'TechOnTheNet.com' ЗАКАЗАТЬ ПО contact_id ASC LIMIT 5;
Теперь результаты будут отсортированы по contact_id в возрастающем порядке, поэтому первые 5 наименьших записей contact_id , у которых есть веб-сайт TechOnTheNet.com ‘будет возвращено этим оператором SELECT LIMIT. Никакие другие записи не будут возвращены этим запросом.
Пример — использование ключевого слова OFFSET
Ключевое слово offset позволяет вам смещать первую запись, возвращаемую предложением LIMIT. Например:
ПРЕДЕЛ 3 СМЕЩЕНИЕ 1
Это предложение LIMIT вернет 3 записи в результирующем наборе со смещением 1. Это означает, что оператор SELECT пропустит первую запись, которая обычно будет возвращена, и вместо этого вернет вторую, третью и четвертую записи.
Давайте посмотрим, как использовать оператор SELECT LIMIT с предложением OFFSET в SQL.
Например:
ВЫБЕРИТЕ contact_id, last_name, first_name ИЗ контактов ГДЕ веб-сайт = 'TechOnTheNet.com' ЗАКАЗАТЬ ПО contact_id DESC LIMIT 5 OFFSET 2;
В этом примере SQL SELECT LIMIT используется OFFSET, равное 2, что означает, что первая и вторая записи в наборе результатов будут пропущены … и затем будут возвращены следующие 5 строк.
Как ограничить строки в наборе результатов SQL Server
Проблема:
Вы хотите ограничить количество строк в наборе результатов SQL Server.
Пример:
В нашей базе данных есть таблица с именем toy
с данными в столбцах id
, name
и price
.
id | наименование | цена |
---|---|---|
161 | Велосипед BMX | 200,00 |
121 | Робот Тоби | 185,50 |
213 | Рыбалка | 25.00 |
102 | Пазлы с животными | 45,80 |
111 | Набор гоночных гусениц | 126,70 |
233 | Easy Bricks | 21,00 |
Подберем названия и цены игрушек. Но нам нужно увидеть только первые пять строк.
Решение 1:
ВЫБЕРИТЕ название, цену ИЗ игрушки ЗАКАЗАТЬ ПО ЦЕНЕ СМЕЩЕНИЕ 0 РЯДОВ ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 5 РЯДОВ;
Вот результат запроса:
наименование | цена |
---|---|
Easy Bricks | 21.00 |
Рыбалка | 25,00 |
Пазлы с животными | 45,80 |
Набор гоночных треков | 126,70 |
Робот Тоби | 185,50 |
Обсуждение:
Чтобы ограничить количество строк в наборе результатов, используйте ORDER BY с дополнительными предложениями OFFSET и FETCH. Сначала запрос сортирует строки (ORDER BY). Затем вы указываете SQL Server, какая строка должна быть первой в результирующем наборе (OFFSET…ROWS) и сколько строк нужно вернуть (FETCH… ONLY).
Предложение OFFSET помещается сразу после ORDER BY. Целое число указывает первую строку для подсчета (в SQL Server первая строка — 0, вторая строка — 1 и т. Д.), За которой следует ключевое слово ROW или ROWS. Вы можете использовать ROW или ROWS, но рекомендуется использовать ROW для 1 строки и ROWS для 0 и нескольких строк. Посмотрите на картинку:
В нашем примере мы сортируем по цене ( ORDER BY price
) и начинаем возвращать результаты с первой строки ( OFFSET 0 ROWS
).Затем мы используем FETCH с ключевым словом FIRST. Вы можете использовать ПЕРВЫЙ или СЛЕДУЮЩИЙ; рекомендуется использовать FIRST, если вы начинаете с первой строки, не пропуская никаких записей, и NEXT, если какие-либо строки опущены (т.е. если OFFSET больше 0).
Наконец, у нас есть количество строк для выбора и ключевое слово ROWS ONLY. Используйте ТОЛЬКО ROWS, если вы возвращаете несколько строк, и ROW ONLY, вы ограничиваете результат одной строкой. В нашем примере мы ограничиваем его пятью строками ( ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 5 СТРОК,
).
Ниже у нас есть еще один запрос, который ограничивает количество строк до пяти, но начинается с пятой строки в таблице ( OFFSET 4 ROWS
):
Решение 2:
ВЫБЕРИТЕ название, цену ИЗ игрушки ЗАКАЗАТЬ ПО ЦЕНЕ СМЕЩЕНИЕ 4 РЯДА ТОЛЬКО ДЛЯ СЛЕДУЮЩИХ 5 РЯДОВ;
Вот результат запроса:
наименование | цена |
---|---|
Робот Тоби | 185,50 |
Велосипед BMX | 200.00 |
Обратите внимание, что этот запрос возвращает только две строки, а не указанные пять. Посмотрите на картинку:
Почему только две строки? Потому что эта таблица содержит всего шесть записей. Если мы опустим первые четыре строки и начнем со строки 5, останется только две строки.
SQL Server имеет другой способ ограничения строк: предложение TOP.
Решение 3:
ВЫБРАТЬ ТОП 3 имя, цена ИЗ игрушки ЗАКАЗАТЬ ПО цене;
Вот результат запроса:
наименование | цена |
---|---|
Easy Bricks | 21.00 |
Рыбалка | 25,00 |
Пазлы с животными | 45,80 |
Если вам не нужно пропускать какие-либо строки, вы можете использовать предложение TOP SQL Server, чтобы ограничить количество возвращаемых строк. Ставится сразу после SELECT. За ключевым словом TOP следует целое число, указывающее количество возвращаемых строк. В нашем примере мы заказали по цене , а затем ограничили возвращаемые строки до 3.
В отличие от метода OFFSET — FETCH, TOP не требует ORDER BY.Вот аналогичный пример, но без сортировки записей:
Решение 4:
ВЫБРАТЬ ТОП 3 имя, цена ОТ игрушки;
Вот результат запроса:
Обратите внимание, что были возвращены разные записи. Обычно (но не всегда) строки отображаются в том порядке, в котором записи были вставлены в таблицу.
Мы рекомендуем использовать OFFSET и FETCH вместо TOP, поскольку OFFSET и FETCH являются стандартом SQL; TOP специфичен для T-SQL.
Размер пакета | 65 536 * (размер сетевого пакета) | Размер сетевого пакета — это размер пакетов потока табличных данных (TDS), используемых для обмена данными между приложениями и реляционным ядром СУБД.Размер пакета по умолчанию составляет 4 КБ и контролируется параметром конфигурации размера сетевого пакета. | |
Длина в байтах строки, содержащей операторы Transact-SQL (размер пакета) | 65 536 * (размер сетевого пакета) | Размер сетевого пакета — это размер пакетов потока табличных данных (TDS), используемых для обмена данными между приложениями и реляционным ядром СУБД. Размер пакета по умолчанию составляет 4 КБ и контролируется параметром конфигурации размера сетевого пакета. | |
Байт на столбец короткой строки | 8 000 | ||
Байт на ГРУППА ПО , ПО ЗАКАЗУ | 8 060 | ||
Байт на ключ индекса | 900 байт для кластерного индекса. 1700 для некластеризованного индекса. До SQL Server 2016 все версии поддерживали 900 байт для всех типов индексов. | Максимальное количество байтов в ключе кластеризованного индекса не может превышать 900 в SQL Server.Для ключа некластеризованного индекса максимум составляет 1700 байт. Вы можете определить ключ, используя столбцы переменной длины, максимальные размеры которых в сумме превышают установленный предел. Однако комбинированные размеры данных в этих столбцах никогда не могут превышать предел. В некластеризованный индекс можно включать дополнительные неключевые столбцы, и они не учитываются при ограничении размера ключа. Неключевые столбцы могут помочь некоторым запросам работать лучше. | |
Байт на ключ индекса для таблиц, оптимизированных для памяти | 2500 байт для некластеризованного индекса.Нет ограничений для хэш-индекса, если все ключи индекса помещаются в строку. | В таблице, оптимизированной для памяти, некластеризованный индекс не может иметь ключевые столбцы, максимальный объявленный размер которых превышает 2500 байтов. Неважно, будут ли фактические данные в ключевых столбцах короче максимальных заявленных размеров. Для ключа хеш-индекса нет жесткого ограничения на размер. Для индексов в таблицах, оптимизированных для памяти, понятие включаемых столбцов отсутствует, поскольку все индексы по своей сути покрывают все столбцы. Для таблицы, оптимизированной для памяти, даже если размер строки составляет 8060 байт, некоторые столбцы переменной длины могут физически храниться вне этих 8060 байт. Однако максимальные объявленные размеры всех ключевых столбцов для всех индексов в таблице плюс любые дополнительные столбцы фиксированной длины в таблице должны уместиться в 8060 байтах. | |
Байт на внешний ключ | 900 | ||
Байт на первичный ключ | 900 | ||
Байт в строке | 8 060 | SQL Server поддерживает хранилище с переполнением строк, что позволяет перемещать столбцы переменной длины за пределы строк.Только 24-байтовый корень сохраняется в основной записи для столбцов переменной длины, вытесненных из строки. Эта функция допускает ограничение, которое фактически выше, чем в предыдущих выпусках SQL Server. Для получения дополнительной информации см. Поддержка больших строк. | |
Байт на строку в оптимизированных для памяти таблицах | 8 060 | Запуск SQL Server 2016 (13.x) таблицы, оптимизированные для памяти, поддерживают хранение вне строк. Столбцы переменной длины выталкиваются из ряда, если максимальные размеры всех столбцов в таблице превышают 8060 байт; это действие — решение времени компиляции.30-1 | |
Кластерные индексы для таблицы | 1 | ||
Столбцы в ГРУППА ПО , ПО ЗАКАЗУ | Ограничено только количеством байтов | ||
Столбцы или выражения в инструкции GROUP BY WITH CUBE или WITH ROLLUP | 10 | ||
Столбцов на ключ индекса | 32 | Если таблица содержит один или несколько индексов XML, ключ кластеризации пользовательской таблицы ограничен 31 столбцом, поскольку столбец XML добавляется к ключу кластеризации первичного индекса XML.В SQL Server вы можете включать неключевые столбцы в некластеризованный индекс, чтобы избежать ограничения максимум 32 ключевыми столбцами. Для получения дополнительной информации см. Создание индексов с включенными столбцами. | |
Столбцы на внешний ключ или первичный ключ | 32 | ||
Столбцы в заявлении INSERT | 4 096 | ||
Столбцы в инструкции SELECT | 4 096 | ||
Столбцов в таблице | 1,024 | Таблицы, содержащие разреженные наборы столбцов, включают до 30 000 столбцов.См. Редкие наборы столбцов. | |
Столбцы в заявлении UPDATE | 4 096 | К разреженным наборам столбцов применяются другие ограничения. | |
Количество столбцов на просмотр | 1,024 | ||
Число подключений на одного клиента | Максимальное значение настроенных подключений | ||
Размер базы данных | 524272 терабайт | ||
Базы данных на экземпляр SQL Server | 32 767 | ||
Файловые группы в базе данных | 32 767 | ||
Файловые группы в базе данных для данных, оптимизированных для памяти | 1 | ||
Файлов в базе данных | 32 767 | ||
Размер файла (данных) | 16 терабайт | ||
Размер файла (журнал) | 2 терабайта | ||
Файлы данных для данных, оптимизированных для памяти, для каждой базы данных | 4096 в SQL Server 2014 (12.Икс). Более поздние версии SQL Server не накладывают такого строгого ограничения. | ||
Дельта-файл на файл данных для данных, оптимизированных для памяти | 1 | ||
Ссылки на таблицы внешних ключей на таблицу | Исходящий = 253. Входящий = 10 000. | Об ограничениях см. Создание отношений по внешнему ключу. | |
Длина идентификатора (в символах) | 128 | ||
Экземпляры на компьютер | 50 экземпляров на автономном сервере. 25 экземпляров отказоустойчивого кластера при использовании общих дисков кластера в качестве хранилища. 50 экземпляров отказоустойчивого кластера с общими файловыми ресурсами SMB в качестве хранилища. | ||
Индексы на таблицу, оптимизированную для памяти | 999, начиная с SQL Server 2017 (14.x) и в базе данных SQL Azure 8 в SQL Server 2014 (12.x) и SQL Server 2016 (13.x) | ||
Замки на соединение | Максимальное количество блокировок на сервер | ||
Блокировок на экземпляр SQL Server | Ограничено только памятью | Это значение предназначено для распределения статической блокировки.Динамические блокировки ограничены только памятью. | |
Уровни вложенных хранимых процедур | 32 | Если хранимая процедура обращается к более чем 64 базам данных или более чем к двум базам данных при чередовании, вы получите сообщение об ошибке. | |
Вложенные подзапросы | 32 | ||
Вложенные транзакции | 4 294 967 296 | ||
Вложенные уровни триггеров | 32 | ||
Некластеризованные индексы для таблицы | 999 | ||
Количество различных выражений в предложении GROUP BY , когда присутствует любое из следующих: CUBE , ROLLUP , GROUPING SETS , WITH CUBE , WITH ROLLUP | 32 | ||
Количество группирующих наборов, сгенерированных операторами в пункте GROUP BY | 4 096 | ||
Параметров на хранимую процедуру | 2 100 | ||
Параметры для каждой пользовательской функции | 2 100 | ||
ССЫЛКИ на таблицу | 253 | ||
Строк на столе | Ограничено доступным хранилищем | ||
Таблицы в базе данных | Ограничено общим количеством объектов в базе данных | Объекты включают таблицы, представления, хранимые процедуры, определяемые пользователем функции, триггеры, правила, значения по умолчанию и ограничения.Сумма количества всех объектов в базе данных не может превышать 2 147 483 647. | |
Разделы на многораздельную таблицу или индекс | 15 000 | ||
Статистика по неиндексированным столбцам | 30 000 | ||
Таблицы в инструкции SELECT | Ограничено только доступными ресурсами | ||
Триггеры на таблицу | Ограничено количеством объектов в базе | Объекты включают таблицы, представления, хранимые процедуры, определяемые пользователем функции, триггеры, правила, значения по умолчанию и ограничения.Сумма количества всех объектов в базе данных не может превышать 2 147 483 647. | |
Подключения пользователей | 32 767 | ||
XML-индексы | 249 |
Microsoft SQL Server Tutorial — Limit Result Set
Введение
По мере роста таблиц базы данных часто бывает полезно ограничить результаты запросов фиксированным числом или процентом.Это может быть достигнуто с помощью ключевого слова TOP
SQL Server или предложения OFFSET FETCH
.
Параметры
Параметр | Подробности |
---|---|
TOP | Ограничивающее ключевое слово. Используйте с номером. |
PERCENT | Процентное ключевое слово. Идет после TOP и предельного числа. |
Если используется предложение ORDER BY
, ограничение применяется к упорядоченному набору результатов.
Ограничение с помощью TOP
В этом примере результат SELECT
ограничен 100 строками.
ВЫБРАТЬ ТОП 100 *
FROM table_name;
Также можно использовать переменную для указания количества строк:
ОБЪЯВИТЬ @CountDesiredRows int = 100;
ВЫБРАТЬ TOP (@CountDesiredRows) *
FROM table_name;
Ограничение на ПРОЦЕНТ
В этом примере результат SELECT
ограничен 15 процентами от общего количества строк.
ВЫБРАТЬ ТОП 15 ПРОЦЕНТОВ *
FROM table_name
Ограничение с помощью FETCH
SQL Server 2012 FETCH
обычно более полезен для разбивки на страницы, но может использоваться как альтернатива TOP
:
ВЫБРАТЬ *
FROM table_name
ЗАКАЗАТЬ ПО 1
СМЕЩЕНИЕ 0 РЯД
ВЫБРАТЬ ТОЛЬКО СЛЕДУЮЩИЕ 50 РЯДОВ
Ограничение количества возвращаемых строк
Сводка : в этом руководстве вы узнаете, как использовать предложения SQL Server OFFSET
FETCH
для ограничения количества строк, возвращаемых запросом.
Предложения OFFSET
и FETCH
являются вариантами предложения ORDER BY
. Они позволяют ограничить количество строк, возвращаемых запросом.
Ниже показан синтаксис предложений OFFSET
и FETCH
:
Язык кода: SQL (язык структурированных запросов) (sql)
ORDER BY список_столбцов [ASC | DESC] OFFSET offset_row_count {ROW | ROWS} ПОЛУЧИТЬ {ПЕРВЫЙ | ДАЛЕЕ} fetch_row_count {ROW | ТОЛЬКО ROWS}
В этом синтаксисе:
- Предложение
OFFSET
указывает количество строк, которые нужно пропустить перед началом возврата строк из запроса.offset_row_count
может быть константой, переменной или параметром, который больше или равен нулю. - Предложение
FETCH
определяет количество строк, возвращаемых после обработки предложенияOFFSET
.offset_row_count
может быть константой, переменной или скаляром, который больше или равен единице. - Предложение
OFFSET
является обязательным, а предложениеFETCH
— необязательным. Кроме того,FIRST
иNEXT
являются синонимами соответственно, поэтому вы можете использовать их как синонимы.Точно так же вы можете использоватьFIRST
иNEXT
как взаимозаменяемые.
Следующее иллюстрирует предложения OFFSET
и FETCH
:
Обратите внимание, что вы должны использовать предложения OFFSET
и FETCH
с предложением ORDER BY
. В противном случае вы получите ошибку.
Предложения OFFSET
и FETCH
предпочтительнее для реализации решения с разбивкой по страницам, чем предложение TOP
.
Предложения OFFSET
и FETCH
доступны с SQL Server 2012 (11.x) и более поздних версий и базы данных SQL Azure.
SQL Server
OFFSET
и Примеры FETCH
Мы будем использовать таблицу products
из образца базы данных для демонстрации.
Следующий запрос возвращает все продукты из таблицы products
и сортирует продукты по их прейскурантным ценам и названиям:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ производство.продукты СОРТИРОВАТЬ ПО список цен, наименование товара;
Чтобы пропустить первые 10 продуктов и вернуть остальные, используйте предложение OFFSET
, как показано в следующем операторе:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ production.products СОРТИРОВАТЬ ПО список цен, наименование товара СМЕЩЕНИЕ 10 РЯДОВ;
Чтобы пропустить первые 10 продуктов и выбрать следующие 10 продуктов, используйте предложения OFFSET
и FETCH
следующим образом:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ производство.продукты СОРТИРОВАТЬ ПО список цен, наименование товара СМЕЩЕНИЕ 10 РЯДОВ ВЫБРАТЬ ТОЛЬКО СЛЕДУЮЩИЕ 10 РЯДОВ;
Чтобы получить 10 самых дорогих продуктов, используйте предложения OFFSET
и FETCH
:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT наименование товара, список цен ИЗ production.products СОРТИРОВАТЬ ПО list_price DESC, наименование товара СМЕЩЕНИЕ 0 РЯД ВЫБРАТЬ ТОЛЬКО ПЕРВЫЕ 10 РЯДОВ;
В этом примере предложение ORDER BY
сортирует продукты по их прейскурантным ценам в порядке убывания.Затем предложение OFFSET
пропускает нулевую строку, а предложение FETCH
выбирает первые 10 продуктов из списка.
В этом руководстве вы узнали, как использовать предложения SQL Server OFFSET
FETCH
, ограничивающие количество строк, возвращаемых запросом.
Размер базы данных Ограничение размера для версий Microsoft SQL Server с 2000 по 2016 — Поддержка GFI
GFI LanGuard позволяет вам работать с Microsoft SQL Server в качестве серверной части базы данных.Иногда ваша база данных может расти и занимать много места на жестком диске сервера. В этой статье описаны действия по настройке ограничения базы данных для каждой версии SQL Server Express.
Примечание- Использование бесплатной экспресс-версии SQL Server может ограничить размер файлов базы данных. SQL Server Standard Edition имеет верхний предел в 524 петабайт, но это не бесплатно.
- Если ваша база данных достигает предела вашей версии SQL Server Express, вы начнете испытывать ошибки из-за неспособности таблиц базы данных принимать новые данные.
Ниже приводится список версий SQL Server Express и их ограничения по размеру:
- Microsoft SQL Server 2000 Desktop — 2 ГБ
- Microsoft SQL Server 2005 Express edition имеет ограничение на размер базы данных до 4 ГБ
- Microsoft SQL Server 2008 Express edition имеет ограничение на размер базы данных до 4 ГБ
- Microsoft SQL Server 2008 R2 Express edition имеет ограничение на размер базы данных до 10 ГБ
- Microsoft SQL Server 2012 Express edition имеет ограничение на размер базы данных до 10 ГБ
- Microsoft SQL Server 2014 Express edition имеет ограничение на размер базы данных до 10 ГБ
- Microsoft SQL Server 2016 Express edition имеет ограничение на размер базы данных до 10 ГБ
Это руководство предоставит информацию о том, как поддерживать размер базы данных и избегать проблем с ограничениями базы данных.
- Удалите старые сканы вручную или автоматически:
- Для удаления вручную
- Щелкните вкладку Configuration .
- Выберите Параметры обслуживания базы данных .
- Выберите Управление результатами сканирования.
- Удалите старые и ненужные отсканированные изображения.
- Для автоматического удаления:
- Щелкните вкладку Configuration .
- Опции обслуживания базы данных .
- Выберите Управление политикой хранения.
- Установите политику хранения, которая соответствует вашим потребностям.
- Для удаления вручную
- Очистите свою базу данных. Есть два варианта очистки базы данных.
- Вариант 1
- Перейдите в Конфигурация> Параметры обслуживания базы данных> Управление результатами сканирования… и удалите все сканирования.
- Перейдите в Конфигурация> Параметры обслуживания базы данных> Настройки базы данных … И укажите новый путь и имя для вашей новой базы данных.Новая база данных создается для вас автоматически. Дополнительные сведения см. В разделе «Создание новой базы данных SQL в GFI LanGuard».
- Вариант 2
- Перейти к конфигурации .
- Параметры обслуживания базы данных.
- Щелкните Настройки серверной части базы данных…
- Отключите GFI LanGuard от базы данных, для которой вы создали резервную копию и хотите удалить, подключившись к другой временной базе данных. Вы можете создать новую базу данных, выполнив Создание новой базы данных SQL в GFI LanGuard.
- Удалите базу данных с SQL Server с помощью SQL Server Management Studio.
- Перейдите в GFI LanGuard в разделе «Конфигурация »> «Параметры обслуживания базы данных»> «Настройки базы данных»… и повторно подключитесь к SQL Server.
- Вариант 1