J'essaie de réaliser quelque chose comme un for-each, où je voudrais prendre les identifiants d'une instruction select retournée et utiliser chacun d'eux.
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
Pour le moment, j'ai quelque chose qui ressemble à ce qui précède, mais j'obtiens l'erreur:
Nom de colonne non valide "idx".
Quelqu'un pourrait-il
idx
n'est @Practitioner
pas Practitioner
. Il existe le plus souvent des alternatives basées sur des ensembles supérieures à une approche pour chaque, si vous montrez ce que vous faites avec la valeur de ligne, une alternative peut peut-être être suggérée.
--Do something with Id here
c'est, il est probable que nous puissions vous montrer comment résoudre ce problème sans boucles ni curseurs. Dans la plupart des cas, vous souhaitez utiliser une solution basée sur des ensembles, car c'est ainsi que SQL Server est optimisé pour fonctionner. Boucler et traiter une ligne à la fois a certainement sa place, mais je soupçonne que ce n'est pas ça.