MS SQL 2008 CTE и CONTAINSTABLE

Опубликовано Vladimir - ср, 27.01.2010 - 11:48

Добавить комментарий

Содержимое данного поля является приватным и не предназначено для показа.

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br><b><i> <img src alt height width>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

В MS SQL для постраничкого вывода можно использовать CTE (Common table expressions):

WITH cte AS
(
SELECT ROW_NUMBER() OVER (ORDER BY FullName ASC) as RowNum,
* FROM Users
) SELECT * FROM cte
WHERE RowNum BETWEEN 0 AND 50

В MS SQL 2008 до SP3 включительно CTE не работает с полнотекстовым поиском

(CONTAINSTABLE)

При запросе

WITH cte AS
(
SELECT * FROM CONTAINSTABLE (Users, FullName, 'иванов') as KeyRankTable 
)
SELECT * FROM cte

Сервер Выдает ошибку

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.

MS обещали исправление в MSSQL2008 R2

а пока можно обойтись subquery

SELECT *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY Users.FullName ASC) as RowNum,  *
FROM Users
WHERE Users.FullName in (SELECT KeyTable.[KEY] FROM CONTAINSTABLE(Users, FullName, 'иванов') as KeyTable)
) as Results
WHERE RowNum BETWEEN 20 AND 40