Ich versuche, etwas in der Art eines For-Each zu erreichen, wobei ich die IDs einer zurückgegebenen select-Anweisung nehmen und jede von ihnen verwenden möchte.
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
Im Moment habe ich etwas, das wie oben aussieht, aber ich bekomme den Fehler:
Ungültiger Spaltenname 'idx'.
Könnte jemand
idx
ist in @Practitioner
nicht Practitioner
. Es gibt meistens überlegene satzbasierte Alternativen zu einem Ansatz für jeden Ansatz. Wenn Sie zeigen, was Sie mit dem Zeilenwert tun, kann möglicherweise eine Alternative vorgeschlagen werden.
--Do something with Id here
ist, können wir Ihnen wahrscheinlich zeigen, wie Sie dieses Problem ohne Schleifen oder Cursor lösen können. In den meisten Fällen möchten Sie eine satzbasierte Lösung verwenden, da SQL Server auf diese Weise für die Funktionsweise optimiert ist. Das Schleifen und Behandeln einer Reihe nach der anderen hat sicherlich seinen Platz, aber ich vermute, dass dies nicht der Fall ist.