2013-07-24 2 views
2

다음 코드를 사용하여 쉼표로 구분 된 목록을 만듭니다. 내가ORDER BY : 쉼표로 구분 된 목록에서 SELECT 절 사용

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name 
FROM Production.Product 
ORDER BY sortOrder 
SELECT @listStr 
GO 

처럼했을 때 나는 그것은 오류를 incorrect syntax near ' ORDER'

+0

sortOrder 란 무엇입니까 ?? 어디에도 정의되어 있지 않으며 테이블에 없습니다. –

+0

sortOrder는 테이블의 열 이름입니다. –

+0

텍스트에 유효하지 않은 문자가 없는지 확인하십시오. 유효하지 않은 문자는 코드의 복사 - 붙여 넣기에서 나올 수 있으며 "공백"으로 나타날 수 있지만 인터프리터는 그런 식으로 보이지 않습니다. –

답변

8

사용 STUFF() 그렇지 않으면, 보이지 않는 텍스트에 유효하지 않은 문자가 있고 빈 공간으로 나타납니다. 내 조언은 새 창을 열고 수동으로 전체 쿼리를 다시 입력하거나 유효하지 않은 문자를 삭제하는 위치를 추측 해보십시오.

+1

STUFF는 첫 번째 ','를 공백으로 구분 된 목록을 만드는 FOR XML 절인 빈 문자열로 바꿉니다. –

0

보여줍니다 난 당신이 얻는 경우가 주문을 넣을 수 있다고 생각하지 않습니다 perticular 순서

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name 
FROM Production.Product 
SELECT @listStr 
GO 

의 목록의 순서를 원했다 스칼라 값 그리고 당신은 하나의 가치만을 기대하기 때문에 그것을 필요로하지 않아야합니다. 당신 같은 쉼표로 구분 된 결과

USE AdventureWorks 
GO 
DECLARE @listStr VARCHAR(MAX) 

SELECT @listStr = STUFF((SELECT ',' + Name 
      FROM Production.Product 
      ORDER BY sortOrder 
     FOR XML PATH('')), 1, 1, '') 

SELECT @listStr 
GO 
+0

'@ listStr' 변수에서 값의 순서를 묻는 중입니다. –

+0

죄송합니다, 지금보십시오. – asantaballa

-1

당신이 볼 올바른 것으로 보인다, 또는 어딘가에서 복사 및 붙여 넣기 된 스크립트의 '근처의 구문이 잘못되었습니다 "거의 모든 시간을 제공