2009-04-18 4 views
2

나는 다음과 같은 SQL 스크립트가 있습니다!T-SQL 다 대일 관계로 문자열을 분할 하시겠습니까?

Line 17 The multi-part identifier "T.data" could not be bound. 

내가 또한 비 가입 버전을 시도하고 같은 오류가 발생했습니다 : 클릭 한 후

DECLARE @temp table (
    ID int IDENTITY(1, 1), 
    data nvarchar(100) 
) 

INSERT INTO @temp (data) VALUES ('a,b,c') 
INSERT INTO @temp (data) VALUES ('d,e,f') 

SELECT * 
FROM @temp AS T 
    INNER JOIN 
     (SELECT * 
     FROM dbo.__StringSplit(T.data, ',', T.ID)) AS S 
    ON T.ID = S.RefID 

그리고에 실행, 나는이 가지고

SELECT T.ID, S.Item AS dataItem 
FROM @temp AS T, dbo.__StringSplit(T.data, ',', T.ID) AS S 
WHERE T.ID = S.RefID 

...

W hat 내가 기대하는 것은 @ test.ID에서 ID를 가진 테이블을 가져와야하고 @ test.data의 각 쉼표로 구분 된 값은 자체 레코드로 분할되고 그 값은 dataItem 필드에 저장됩니다.

어떻게하면됩니까?
커서를 사용해야합니까?

나는 http://pastebin.com/f7dd6350f

감사에서 DBO .__ StringSplit 테이블 반환 함수 구현을 붙여했습니다!

+0

여전히 교차 적용을 사용하지만 분할 문자열 기능을 내 대답의 링크로 대체하십시오. –

답변

3

SQL2000에는 커서가 필요합니다. SQL2005/2008에서는 CROSS APPLY satement를 사용할 수 있습니다. 아마 다음과 같은 (지금 테스트 할 수 없습니다) :

SELECT T.ID, S.Item AS dataItem 
FROM @temp AS T CROSS APPLY dbo.__StringSplit(T.data, ',', T.ID) AS S 

편집을 - 나는 this page on CROSS APPLY을 발견하고 함께했다 :

:-) 내 문제를 해결
SELECT T.ID, S.Item AS dataItem 
FROM @temp AS T 
    CROSS APPLY 
    dbo.__StringSplit(T.data, ',', T.ID) AS S 
WHERE T.ID = S.RefID 

+0

CROSS APPLY가 매력처럼 작동했습니다! 감사! – chakrit

관련 문제