Переменная во встроенной табличной функции - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь написать встроенную функцию табличного значения с использованием SSMS v18.2 для SQL Server 2017 с циклом while.

Можно ли как-то объявить переменную во встроенном табличном значениифункция для цикла?

Если да, какой синтаксис для этого?

1 Ответ

1 голос
/ 10 октября 2019

Я отвечаю на комментарий, а не на вопрос здесь, который является «Потому что я хочу использовать цикл while с переменной типа int и возрастающей» . Проще говоря, не надо. Лучший (и я имею в виду лучший) способ сделать это с помощью Tally (они также быстрее, чем rCTE).

Ниже приведено число 1-1 000 000, и оно будет выполнено вс точностью до секунд:

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS (
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2, N N3, N N4, N N5) --1 Million
SELECT I
FROM Tally;

Выше приведено решение на основе множеств, которое можно «легко» расширить для работы с наборами данных;например, создание всех дат между двумя датами.

Джефф Моден также может прочитать о Tallys в этой статье: Таблица «Numbers» или «Tally»: что это такое и как оно заменяетцикл

Этот вопрос на самом деле не отвечает реальной проблеме, с которой сталкивается ОП, он просто вводит их в подсчет 9, и это не помещается в комментарии). Я бы предложил, Хай Нгуен, задать новый вопрос, объясняя ваши реальные цели, чтобы мы могли помочь вам понять, как вы можете применить вышеизложенное на практике.

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