2010-08-09 3 views
0

필드를 쉼표로 분리하는 UDF를 호출하는 매우 간단한 쿼리가 있습니다. 나는 그것을 구문 분석 실행/때 쿼리가'.'근처의 구문이 잘못되었습니다. - 매우 간단한 쿼리

select top 10 * FROM Emails e WHERE EXISTS(SELECT TOP 1 1 FROM dbo.fn_Split(e.committees,',')) 

, 내가 얻을 :

Msg 170, Level 15, State 1, Line 4 
Line 4: Incorrect syntax near '.'. 

난 당신이 하드 코딩 뭔가 e.committees을 (교체 아웃 전환하는 경우는 SQL 2000 함께 할 수있는 뭔가가 있어야합니다 생각 즉 'A, B, C, D') 제대로 작동합니다.

+0

또한 10 개의 행 (전자 메일에 데이터가있는 경우)이 항상 반환된다는 것을 알고 있습니다. – Jonathan

+0

그 부분에 대해 확실합니까? 'TOP 1 1 FROM'? – Andrey

+0

문자열을 분할하는 함수를 사용하면 쿼리가 끔찍합니다. 문자열의 첫 번째 필드를 쉽게 얻을 수 있습니다. 이것은 단일 셀 안에 목록을 저장하는 정규화 규칙에 위배됩니다. 구문 오류가 있으면 심각한 문제가 발생합니다. – Andrey

답변

0

SQL 2000은 TVF에 열 이름을 전달하는 것을 지원하지 않습니다. SQL2005에서 가져온 내용은 ​​CROSS APPLY입니다.

여기서해야 할 일이 무엇인지 잘 모르겠습니다. e.committees은 1NF 이외의 숫자위원회 위원 명단입니까? 그래서

select top 10 <column-list> 
FROM Emails e 
WHERE e.committees 
like '%[0-9]%' 
ORDER BY ... 

는 작동 할 수 있지만, 더 나은 솔루션은 열 email_id, committee_id 또는 무엇 이건 테이블에 표준화 된 형태로이를 저장하는 것입니다 경우. 이것은 당신의 질문을 쉽게 만들 것입니다!

관련 문제