Tôi đang cố gắng để đạt được một cái gì đó dọc theo từng dòng, nơi tôi muốn lấy Id của một câu lệnh chọn được trả về và sử dụng từng câu lệnh.
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
Hiện tại tôi có một cái gì đó trông giống như ở trên, nhưng đang gặp lỗi:
Tên cột không hợp lệ 'idx'.
Ai đó có thể
idx
là trong @Practitioner
không Practitioner
. Có nhiều lựa chọn thay thế dựa trên tập hợp ưu việt hơn cho cách tiếp cận cho mỗi phương pháp, nếu bạn chỉ ra những gì bạn làm với giá trị hàng có lẽ có thể đề xuất một phương án thay thế.
--Do something with Id here
là gì , có khả năng chúng tôi có thể chỉ cho bạn cách giải quyết vấn đề này mà không có bất kỳ vòng lặp hoặc con trỏ nào. Trong hầu hết các trường hợp, bạn muốn sử dụng giải pháp dựa trên tập hợp, vì đó là cách SQL Server được tối ưu hóa để hoạt động. Vòng lặp và xử lý một hàng tại một thời điểm chắc chắn có vị trí của nó, nhưng tôi nghi ngờ đây không phải là nó.