У меня вопрос к новичку.
Это фрагмент кода, который работает:
declare @RowNr int = 1
declare @CA int = 0
While @RowNr <= 1000
BEGIN
With CCWithRow AS
(
SELECT CA ,ROW_NUMBER() OVER (order by CA) as RowNr
FROM myCATable
)
SELECT @CA = CA, @RowNr = RowNr
FROM CCWithRow
WHERE RowNr = @RowNr
Set @RowNr += 1
--Doing something with @CA here
END
Этот код не:
declare @RowNr int = 1
declare @CA int = 0
With CCWithRow AS
(
SELECT CA ,ROW_NUMBER() OVER (order by CA) as RowNr
FROM myCATable
)
While @RowNr <= 1000
BEGIN
SELECT @CA = CA, @RowNr = RowNr
FROM CCWithRow
WHERE RowNr = @RowNr
Set @RowNr += 1
--Doing something with @CA here
END
Вопрос: Почему я должен «определять» WITH внутри цикла?
Я знаю, что есть более эффективные способы решения исходной проблемы, так что это не должно быть предметом. Просто хочу знать, почему я не могу определить WITH вне цикла и использовать его внутри.