2016-12-28 1 views
0

목록이 SELECT 문인 제품 목록을 통해 반복하고 싶습니다.select 문의 목록을 반복 할 수 있습니까?

DECLARE @i INT 
SELECT @i = 0 

WHILE(@i < 100) 
BEGIN 
    ... 

    SET @i = @i + 1 
END 

이 내가 원하는 것이 아니다 : 지금은 증가 단지 INT 변수입니다. 문장의 요소 (의사 틱)의 라인을 따라 뭔가가 @i 있도록 내가 이것을 수정하는 방법 :

DECLARE @ids List<INT> 
SELECT @ids = (SELECT p.Id FROM Products p WHERE p.Active = 1) 

FOR(@id in @ids) 
BEGIN 
    ... 
END 

BEGIN END 섹션과 이것 저것을 잡아 당겨 문을 여러 줄의 부부입니다 처음부터 @i의 ID를 가진 제품. 하지만 AND p.Active = 1을 BEGIN END 섹션의 모든 문에 추가하는 대신 활성 제품 목록을 만들 수 있다고 생각했습니다. 이것은 Microsoft SQL Server Management Studio를 사용하는 Microsoft SQL Server 용입니다.

+1

어떤 데이터베이스입니까? SQL 서버, MySQL, 다른 것? 예 : SQL Server에는 커서가있어 원하는대로 할 수 있습니다 (필자는 생각합니다). – MarcinJuraszek

+0

사용중인 dbms에 태그를 지정하십시오. 이 코드는 ANSI SQL과 거의 다릅니다. – jarlh

+0

DBMS에 태그를 추가하십시오. – McNets

답변

1

아래의 두 가지 옵션을 시도해보고 오류가 발생하면 알려주세요. 데이터가있는 경우

옵션 1. 여분 신원 다음 열이 루프 변수 테이블을 테이블 변수를 선언.

DECLARE @VarTable TABLE (ORDER_ID int IDENTITY(1,1), ID INT not null) 
INSERT INTO @VarTable 
SELECT p.Id 
FROM Products p 
WHERE p.Active = 1 

DECLARE @order_id int = 1 
DECLARE @max_order_id int = (SELECT ISNULL(MAX(ORDER_ID),0) FROM @VarTable) 
WHILE (@order_id <= @max_order_id) 
BEGIN 
    -- do your stuff 
    SET @order_id = @order_id + 1 
END 

옵션 2. 당신은 당신의 선택 문에서 ID를 통해 루프 커서를 사용할 수 있습니다.

+0

@fUrious. 어떤 옵션을 선택 했습니까? – PawelCz

관련 문제