Sql limit
Содержание:
SQL Limit Clause
MySQL, PostgreSQL and many more databases support the usage of SQL Limit clause. The SQL query is executed and finally, the number of results specified by the LIMIT clause is returned. If the result set size is smaller than the rows specified by the LIMIT clause, then all the result set is returned.
Let’s try to understand the usage of SQL Limit clause.
SQL Limit Example
Syntax:
We will consider the following table for understanding SQL Limit in a better way.
Student
| StudentId | StudentName | State | Country |
|---|---|---|---|
| 1 | Henry | Wales | UK |
| 2 | Rohit | Delhi | India |
| 3 | Steve | London | UK |
Below is the query to create the table and insert some sample data. Note that I am using PostgreSQL, so you might have to make some changes to run it in other databases.
Now we will try to limit the display result to just 2 rows.
Output:
| StudentId | StudentName | State | Country |
|---|---|---|---|
| 1 | Henry | Wales | UK |
| 2 | Rohit | Delhi | India |

SQL Limit
There are times when we need to limit the number of rows based on some condition. We will try to understand the scenario better in the next section.
SQL Limit with Where Clause
SQL Limit can also be used along with WHERE clause.
SQL Limit with Where Clause Syntax:
We will consider the same student table for this case as well.
Let us try to get one entry from the table with the country as UK.
Output:
| StudentId | StudentName | State | Country |
|---|---|---|---|
| 1 | Henry | Wales | UK |

SQL Limit with Where clause
Introduction to MySQL LIMIT clause
The clause is used in the statement to constrain the number of rows to return. The clause accepts one or two arguments. The values of both arguments must be zero or positive integers.
The following illustrates the clause syntax with two arguments:
In this syntax:
- The specifies the offset of the first row to return. The of the first row is 0, not 1.
- The specifies the maximum number of rows to return.
The following picture illustrates the clause:
When you use the clause with one argument, MySQL will use this argument to determine the maximum number of rows to return from the first row of the result set.
Therefore, these two clauses are equivalent:
And
In addition to the above syntax, MySQL provides the following alternative clause for compatibility with PostgreSQL.
and clauses
The statement without an clause returns rows in an unspecified order. It means that rows can be in any order. When you apply the clause to this unordered result set, you will not know which rows the query will return.
For example, you may want to get fifth through tenth rows, but fifth through tenth in what order? The order of rows is unknown unless you specify the clause.
Therefore, it is a good practice to always use the clause with the clause to constraint the result rows in unique order.
The following picture illustrates the evaluation order of the clause in the statement:
Oracle Row Limiting Clause
[]
Up until Oracle 12c, performing row limiting or top-N queries was harder. There was no keyword you could use, so you had to use one of several solutions. I’ve outlined those later in this guide if you’re not using 12c or higher.
If you are using Oracle 12c, performing top-N and SQL limit queries is a lot easier with the introduction of the Row Limiting clause. (Related: Oracle 12c New Features for Developers)
The syntax for this clause looks a little complicated (as shown in the ), but it’s simple to use when you know what data you want to see:
If you want to write a top-N query, the query would look simple. Using our earlier example of finding the top 5 customers by revenue, our query would look like this:
The result looks like this:
| CUSTOMER_ID | REVENUE |
| 2 | 9384760 |
| 10 | 5131750 |
| 11 | 4431791 |
| 8 | 4341421 |
| 4 | 3596297 |
So, to write a top-N SQL query in Oracle, you simply add FETCH FIRST n ROWS ONLY to the end of your SQL query and substitute n for the number of rows you want to return.
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL OperatorsSQL Data TypesSQL Quick Ref
SQL Pagination in Oracle
[]
Pagination is a feature in many applications that allows you to show different pages of results.
For example, when searching in Google, you see results 1 to 10. When you click on the next page, you see results 11-20.
This is easy to do in Oracle SQL with the row limiting clause. We can simply use the OFFSET keyword within this clause.
With our sample query, say we wanted to find the top 3 customers by revenue. Our query would look like this:
The results would be:
| CUSTOMER_ID | REVENUE |
| 2 | 9384760 |
| 10 | 5131750 |
| 11 | 4431791 |
If we then wanted to find “page 2” of this data, or see results 4 to 6, our query would be:
This includes the words OFFSET 3 ROWS, which means that the “FETCH FIRST 3 ROWS” should start after the first 3 rows, therefore getting rows 4 to 6.
The results would be:
| CUSTOMER_ID | REVENUE |
| 8 | 4341421 |
| 4 | 3596297 |
| 13 | 3596297 |
You can change the parameters in the OFFSET and FETCH clause to define how many results you want per page.
For example, if you want 10 results per page, your queries would look like this:
And for the second page:
You can and should use bind variables for the OFFSET and FETCH values, but I’ll write about that in another post.
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL OperatorsSQL Data TypesSQL Quick Ref
Функция CONTAINSTABLE
Это табличная функция, которая возвращает результирующий набор данных с проставленным рангом. RANK — это значение от 0 до 1000, показывающее степень соответствия каждой строки условию поиска. Другими словами, мы можем написать запрос и получить отсортированный результат по релевантности. При использовании функции CONTAINSTABLE можно использовать такие же условия поиска, как и в CONTAINS. Эта функция помимо RANK возвращает еще столбец KEY — это уникальный ключ базовой таблицы, по которому можно произвести объединение.
Давайте напишем полнотекстовый запрос, который вернет записи, в которых есть слово SQLили Microsoft, при этом отсортируем результат по релевантности, т.е. сначала будут идти те строки, которые максимально подходят под наш критерий.
--CONTAINSTABLE
SELECT Table1.Id AS ,
RowRank.Rank AS ,
Table1.TextData AS
FROM TestTable AS Table1
INNER JOIN CONTAINSTABLE(TestTable, TextData, '"SQL" OR "Microsoft"') AS RowRank
ON Table1.Id=RowRank.
ORDER BY RowRank.RANK DESC;

В случае необходимости в функцию CONTAINSTABLE четвертым параметром можно передать язык, ресурсы которого будут использоваться для разбиения слов, но он не обязателен. Также пятым или четвертым параметром (если не указан параметр LANGUAGE) можно передать число, которое ограничит результирующий набор. Например, для получения только первых 3 строк мы бы написали вот такой запрос:
--CONTAINSTABLE с ограничением строк
SELECT Table1.Id AS ,
RowRank.Rank AS ,
Table1.TextData AS
FROM TestTable AS Table1
INNER JOIN CONTAINSTABLE(TestTable, TextData, '"SQL" OR "Microsoft"', 3) AS RowRank
ON Table1.Id=RowRank.
ORDER BY RowRank.RANK DESC;


Поиск с использованием взвешенных значений
В условии поиска можно указать важность того или иного слова или фразы от 0.0 до 1.0, т.е. осуществлять поиск со взвешенными значениями
Значение 0.0 является самым низким, а значение 1.0 самым высоким (в качестве десятичного разделителя всегда используется точка). Чтобы в запросе использовать взвешенные значения, необходимо использовать такие функции, как ISABOUT и WEIGHT. Их также можно использовать и в запросах CONTAINS.
А теперь допустим, что нас результаты ранжирования, из предыдущего примера, не устроили, мы хотим видеть сначала только самые релевантные строки, содержащие слово SQL, а только потом строки со словом Microsoft. Для этого мы назначим более высокий приоритет слову SQL, допустим 0.9, а Microsoft 0.1.
--CONTAINSTABLE. Поиск с использованием взвешенных значений
SELECT Table1.Id AS ,
RowRank.Rank AS ,
Table1.TextData AS
FROM TestTable Table1
INNER JOIN CONTAINSTABLE(TestTable, TextData,
'ISABOUT("SQL" WEIGHT(.9), "Microsoft" WEIGHT(.1))') AS RowRank
ON Table1.id=RowRank.
ORDER BY RowRank.RANK DESC;

Как видим, результат у нас изменился и теперь строки, которые содержат слово SQL, имеют более высокий ранг.
Исходные данные и требования
В качестве примера давайте представим, что нам нужно обратиться к файлу «TestExcel.xls», который расположен на диске D. Сами данные расположены на листе со стандартным названием «Лист1», они имеют следующую структуру.
| ProductId | CategoryId | ProductName | Price |
| 1 | 1 | Клавиатура | 100 |
| 2 | 1 | Мышь | 50 |
| 3 | 2 | Телефон | 300 |
Все примеры будут выполнены в Microsoft SQL Server 2016 Express.
Для того чтобы начать пользоваться распределенными запросами, нам сначала нужно включить данную возможность на SQL сервере, так как по умолчанию она выключена.
Включается возможность использования распределённых запросов с помощью системной хранимой процедуры sp_configure, которая отвечает за системные параметры сервера. Нам необходимо параметру Ad Hoc Distributed Queries присвоить значение 1, для этого выполните следующую SQL инструкцию.
sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO
Параметром show advanced options мы отображаем дополнительные параметры системной хранимой процедуры sp_configure, а командой RECONFIGURE мы применяем новые параметры.
Как можно сочетать SUBSTRING, CHARINDEX и LEN
И так, к примеру, Вам необходимо искать в строке ее часть по определенному критерию и вырезать ее, и не просто искать однотипную часть, а динамически, т.е. для каждой строки строка поиска будет разная. Примеры будем писать в Management Studio SQL Server 2008.
Для этого мы будем использовать следующие функции:
- SUBSTRING(str, start, len) – данная функция вырезает часть строки из другой строки. Имеет три параметра 1. Это сама строка; 2. Начальная позиция, с какой необходимо начать вырезать; 3. Количество символов, сколько необходимо вырезать.
- CHARINDEX(str1, str2)- ищет str1 в str2 и возвращает порядковый номер первого символа в случае нахождения такой строки. Имеет третий не обязательный параметр, с помощью которого можно указать с какой стороны начинать поиск.
- LEN (str1)-длина строки, т.е. количество символов.

Как Вы видите, здесь я использовал объявление переменных, а Вы вместо переменных можете подставлять свои поля в запросе. Вот сам код:
declare @rezult as varchar(10) --исходная строка declare @str1 as varchar(100) --строка поиска declare @str2 as varchar(10) set @str1 = 'Пробная строка string для поиска в ней другой строки' set @str2 = 'string' set @rezult=substring(@str1,CHARINDEX(@str2, @str1 ), LEN(@str2)) select @rezult
Смысл здесь вот в чем, мы, используя функцию len узнаем, сколько символов необходимо вырезать, а charindex задает ту позицию, с которой необходимо начинать вырезать, и соответственно substring выполняет саму выборку в строке.
MySQL SQL Limit Feature: The SQL LIMIT Keyword
[]
In MySQL, you can use the LIMIT clause to restrict the number of rows returned by a SELECT query. You provide two parameters: the offset number, and the count (the maximum number of rows to be returned).
The syntax of this in MySQL is:
We can use this on our sample database. Let’s say we wanted to find the top 5 customers by revenue in descending order. Our query would look like this:
The results would look like this:
| CUSTOMER_ID | REVENUE |
| 2 | 9384760 |
| 10 | 5131750 |
| 11 | 4431791 |
| 8 | 4341421 |
| 4 | 3596297 |
This table shows the top 5 results ordered by revenue in descending order. The LIMIT clause in MySQL is easy to use and is the most common way of limiting the top results in MySQL. For more information on the MySQL row limiting feature, look at the official documentation.
Getting the rows with the Nth highest value
Suppose you have to get employees whose has 2nd highest salary in the company. To do so, you use the clauses as follows.
The clause sorts the employees by salary in descending order. And the clause gets the second row from the result set.
This query works with the assumption that every employee has a different salary. It will fail if there are two employees who have the same highest salary. In addition, in case you have two or more employees who have the same 2nd highest salary, the query just returns the first one.
To fix this issue, you can get the second highest salary first using the following statement.
And pass the result to another query:
If you know subquery, you can combine both queries into a single query as follows:
In this tutorial, we have introduced you to the SQL LIMIT and OFFSET clauses that allow you to constrain the number of rows returned by a query.
- Was this tutorial helpful ?
Запросы на получение полнотекстовых свойств индексирования
Дополнительно хотелось бы еще отметить пару функций, с помощью которых нельзя выполнить поиск, но можно узнать параметры, которые влияют на результаты поиска.
Функция FULLTEXTCATALOGPROPERTY
С помощью этой функции можно узнать свойства полнотекстового каталога. Она имеет два параметра: первый — это название полнотекстового каталога и второй — это имя свойства, значение которого мы хотим узнать.
Например, следующий запрос показывает статус полнотекстового каталога, т.е. какая операция в данный момент выполняется:
SELECT CASE
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 0
THEN 'Бездействие'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 1
THEN 'Идет полное заполнение'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 2
THEN 'Пауза'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 3
THEN 'Ограниченный режим'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 4
THEN 'Восстановление'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 5
THEN 'Выключение'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 6
THEN 'Идет добавочное заполнение'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 7
THEN 'Построение индекса'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 8
THEN 'Диск заполнен. Приостановлено'
WHEN FULLTEXTCATALOGPROPERTY('TestCatalog','PopulateStatus') = 9
THEN 'Отслеживание изменений'
ELSE ''
END AS ;

Также доступны и другие свойства, например:
- AccentSensitivity – учет диакритических знаков, 0 без учета, 1 с учетом;
- IndexSize – логический размер полнотекстового каталога в мегабайтах (МБ);
- ItemCount – количество элементов в полнотекстовом каталоге;
- MergeStatus – выполняется ли слияние в единый файл, 0 слияние не выполняется, 1 слияние выполняется;
- PopulateCompletionAge – разница в секундах между последним заполнением полнотекстового индекса и 01/01/1990 00:00:00;
- UniqueKeyCount – количество уникальных ключей в полнотекстовом каталоге;
- ImportStatus – выполняется ли в настоящее время импорт полнотекстового каталога, 0 не выполняется, 1 выполняется.
Функция OBJECTPROPERTYEX
Это функция используется для получения данных об объектах области схемы в текущей базе данных. Другими словами, с помощью нее можно узнать свойства объектов, не только относящихся к полнотекстовому индексированию. В качестве параметров она принимает: первый параметр — идентификатор объекта и второй — это название свойства, значение которого мы хотим узнать.
В случае с полнотекстовым поиском она нам может помочь, например, тогда, когда мы хотим узнать, есть ли у таблицы полнотекстовый индекс или включено ли полнотекстовое отслеживание изменений.
SELECT OBJECTPROPERTYEX(OBJECT_ID('TestTable'),
'TableHasActiveFulltextIndex') AS [Активный полнотекстовый индекс(TRUE/FALSE)],
OBJECTPROPERTYEX(OBJECT_ID('TestTable'),
'TableFulltextChangeTrackingOn') AS [Полнотекстовое отслеживание изменений(TRUE/FALSE)],
OBJECTPROPERTYEX(OBJECT_ID('TestTable'),
'TableFulltextCatalogId') AS ;

На этом у меня все, пока!
НравитсяНе нравится