Я пытаюсь достичь чего-то по принципу «для каждого», где я хотел бы взять идентификаторы возвращенного оператора выбора и использовать каждый из них.
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
На данный момент у меня есть что-то похожее на выше, но я получаю ошибку:
Неверное имя столбца 'idx'.
Может ли кто-то
idx
в @Practitioner
нет Practitioner
. Чаще всего существуют подходящие альтернативы для каждого подхода, основанные на множествах, если вы показываете, что делаете со значением строки, возможно, можно предложить альтернативу.
--Do something with Id here
это, то, скорее всего, мы сможем показать вам, как решить эту проблему без каких-либо циклов или курсоров. В большинстве случаев вы хотите использовать решение на основе множеств, поскольку именно так SQL Server оптимизирован для работы. Цикл и обработка одного ряда за раз, безусловно, имеют свое место, но я подозреваю, что это не так.