Почему переменные не работают с командой TOP? - PullRequest
0 голосов
/ 31 августа 2018
  1. Почему ниже SQL-сценарий генерирует ошибки?
  2. Это проблема с командой TOP?
  3. Или это из-за оператора SELECT, который не поддерживает переменные SQL?

Мой код:

DECLARE @cnt INTEGER = 0;
Declare @cnt_total INT;

SET @cnt_total = 5

WHILE (@cnt < @cnt_total)
BEGIN
    SET @cnt = @cnt + 1;

    SELECT TOP @cnt * 
    FROM FOCUSCDR.PATIENTDXHISTORY
END;

Ошибка:

Сообщение 102, Уровень 15, Состояние 1, Строка 9
Неверный синтаксис рядом с'@cnt'.

Хотя выше, работает при использовании.

SELECT TOP 1 * 
FROM FOCUSCDR.PATIENTDXHISTORY

1 Ответ

0 голосов
/ 31 августа 2018

Поскольку синтаксис требует скобок:

DECLARE @cnt INTEGER = 0;
Declare @cnt_total int ;

Set @cnt_total = 5

WHILE (@cnt < @cnt_total)
BEGIN
   SET @cnt = @cnt + 1;
   Select  top (@cnt) * from FOCUSCDR.PATIENTDXHISTORY
END;

Edit:

Как уже упоминалось в комментарии @Tim Biegeleisen, вы должны использовать ORDER BY, иначе использование TOP не имеет смысла, так как порядок не будет гарантирован, и вы можете получить несогласованные результаты. Проверьте эту статью для получения дополнительной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...