Estou tentando conseguir algo parecido com um for-each, onde gostaria de pegar os IDs de uma instrução select retornada e usar cada um deles.
DECLARE @i int
DECLARE @PractitionerId int
DECLARE @numrows int
DECLARE @Practitioner TABLE (
idx smallint Primary Key IDENTITY(1,1)
, PractitionerId int
)
INSERT @Practitioner
SELECT distinct PractitionerId FROM Practitioner
SET @i = 1
SET @numrows = (SELECT COUNT(*) FROM Practitioner)
IF @numrows > 0
WHILE (@i <= (SELECT MAX(idx) FROM Practitioner))
BEGIN
SET @PractitionerId = (SELECT PractitionerId FROM @Practitioner WHERE idx = @i)
--Do something with Id here
PRINT @PractitionerId
SET @i = @i + 1
END
No momento, tenho algo parecido com o acima, mas estou recebendo o erro:
Nome de coluna inválido 'idx'.
Alguém poderia
idx
está em @Practitioner
não Practitioner
. Na maioria das vezes, existem alternativas superiores baseadas em conjuntos a uma abordagem para cada um, se você mostrar o que faz com o valor da linha, talvez uma alternativa possa ser sugerida.
--Do something with Id here
é, é provável que possamos mostrar como resolver esse problema sem loops ou cursores. Na maioria dos casos, você deseja usar uma solução baseada em conjunto, pois é assim que o SQL Server é otimizado para funcionar. Dar laços e tratar uma linha de cada vez certamente tem seu lugar, mas suspeito que não seja isso.