복붙노트

[SQL] 여러 행에 테이블 반환 함수를 실행?

SQL

여러 행에 테이블 반환 함수를 실행?

같은에서 dbo.Split ()와 같은 테이블 반환 함수 감안할 때 "T-SQL : 반대 문자열 연결에 - 어떻게 여러 레코드로 문자열을 분할"나는 인수로 여러 행을 통과 어떻게?

이 작품 :

SELECT *
FROM dbo.Split
  (',', (SELECT myColumn FROM Stuff WHERE id = 22268))
WHERE ISNULL(s,'') <> ''

그것은 반환 :

pn          s
----------- -----------
1           22351
2           22354
3           22356
4           22357
5           22360

하지만이되지 않습니다 :

SELECT *
FROM dbo.Split
  (',', (SELECT myColumn FROM Stuff))
WHERE ISNULL(s,'') <> ''

도 아니다이 수행합니다

SELECT * FROM dbo.Split_temp(',', myColumn), Stuff

워드 프로세서 말 :

결과의 종류는 내가 좋아하는 뭔가를 보일 것이다 찾고 있어요 설정 :

id          pn          s
----------- ----------- -----------
22268       1           22351
22268       2           22354
22268       3           22356
22268       4           22357
22268       5           22360
24104       1           22353
24104       2           22355
24104       3           22356
24104       4           22358
24104       5           22360
24104       6           22362
24104       7           22364
.
.
.

(물론, 커서는 제외) 이러한 목표를 달성하기 위해 전혀 방법이 있나요?

(편집하다)

MarlonRibunal의 요청에 따라, 샘플 테이블과 같은 위의 결과 외모를 생산 :

id          myColumn
----------- -------------------------------------------
22268       22351,22354,22356,22357,22360,
24104       22353,22355,22356,22358,22360,22362,22364,

ID는 INT이고; myColumn은 VARCHAR (최대)이다.

해결법

  1. ==============================

    1.OUTER이 적용됩니다

    OUTER이 적용됩니다

    SELECT Stuff.id
        ,Results.pn
        ,Results.s
    FROM stackoverflow_454945 AS Stuff
    OUTER APPLY dbo.Split(',', Stuff.myColumn) AS Results
    WHERE ISNULL(Results.s,'') <> ''
    
  2. ==============================

    2.당신은 유착의 연결 동작을 사용할 수 있습니다

    당신은 유착의 연결 동작을 사용할 수 있습니다

    declare @split varchar(max) 
    set @split = ''
    
    select @split = @split + Coalesce(myColumn + ',' , ' ') 
    from Stuff 
    WHERE id = 22268
    
    select * from dbo.Split(',', @Left(@split,len(@split) -1))
    

    나는 그 커서를 사용하는 것보다 더 좋은 것이라고 모른다.

  3. from https://stackoverflow.com/questions/454945/execute-table-valued-function-on-multiple-rows by cc-by-sa and MIT license