Невозможно сгенерировать записи, используя Choose (Denali) и Recursive CTE - PullRequest
0 голосов
/ 01 сентября 2011

Я хочу сгенерировать некоторые записи в рекурсивном CTE, используя новую функцию выбора

    ;With Cte As
(
    Select 
        Id=1
        To = Cast ('India' as varchar(10))
    Union All
    Select 
        Id +1 
        ,To= Cast( Choose(ID,'India','Belgium') as varchar(10))     
    From Cte 
    Where Id < 10    
)

Select * from Cte

Ожидаемый результат

Id  PlayerName                  BelongTo
1   Player1                     India
2   Player2                     Belgium    

Как это сделать, используяФункция выбора?

1 Ответ

0 голосов
/ 01 сентября 2011

ВЫБРАТЬ задокументировано для возврата NULL:

Если значение индекса превышает границы массива значений

Так что вам нужно выполнить операцию по модулю. Оператор по модулю в SQL: % , поэтому он будет:

Cast( Choose(((ID%4)+1),'India','Australia','England','Belgium') as varchar(100))

(у меня изначально было -1 от ID, но, учитывая, что этот оператор выполняется в контексте, где значение ID взято из предыдущей строки, с этим уже разобрались)

...