我正在尝试按照for-each的方式实现某些目标,在这里我想获取返回的select语句的ID并使用它们中的每一个。
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”。
有人可以吗
2
如何在SQL Server中使用Transact-SQL遍历结果集:support.microsoft.com/kb/111401/nl
—
Anonymoose 2013年
idx
是@Practitioner
不是Practitioner
。对于每个方法,最常见的是基于集合的替代方法,如果您显示对行值的处理方法,则可能会提出替代方法。
请发布有关您要完成的任务的更多信息。避免像鼠疫一样发生RBAR(99%的时间)。 simple-talk.com/sql/t-sql-programming/…–
—
granadaCoder
RBAR不好,基于集的很好。
—
granadaCoder
如果您告诉我们是什么
—
亚伦·贝特朗
--Do something with Id here
,我们很可能会向您展示如何解决此问题而没有任何循环或游标。在大多数情况下,您希望使用基于集合的解决方案,因为这是SQL Server优化工作的方式。一次循环处理一行肯定有其位置,但是我怀疑不是这样。