2014-04-14 2 views
0

TSQL SELECT 문 안에서 문자열 리터럴을 N 번 반복하는 방법을 찾고 있습니다. 여기서 N은 테이블의 열에서 선택 (또는 계산)하는 정수입니다.TSQL 문자열을 선택하여 N 번 반복

특히 내가하고있는 것은 계층 적 트리 구조를 중첩 된 HTML 순서없는 목록으로 구문 분석하는 것입니다. 그래서 우리가 나무 깊숙이 깊숙이 있다고 가정하겠습니다. 그러나 다음 항목은 매우 얕습니다. 트리의 위쪽에서 열린 <ul><li> 태그를 닫아야합니다. 그래서 내가 무슨 짓을 (하지만 난 너무 미봉책하다고 생각하는)입니다 :

select case Depth-Next_Depth 
    when -1 then '' 
    when 0 then '' 
    when 1 then '</ul></li>' 
    when 2 then '</ul></li></ul></li>' 
    when 3 then '</ul></li></ul></li></ul></li>' 
    ... 
    end 
from MyTable 

내가 ReturnClosingTags(@N int) 같은 스칼라 함수를 만들 수 있다는 것을 알고 있지만 나는이에 대한 데이터베이스에 다른 개체를 추가하고 싶지 않아요. select 문에서 모든 것을 수행하여 DB 스키마를 더 이상 수정할 필요가 없도록하고 싶습니다.

내 전체 접근법 (HTML로 내 트리를 구문 분석하기 위해 코드를 직접 작성)이 무용지물 일 수 있으므로 대안으로 의견을 말하면 자유 롭다. 그러나 그 자체의 질문에 관심이있다. 그래서 "duh 그냥 .NET 라이브러리 XYZ를 사용하십시오."라고 말하더라도이 작은 SQL 퍼즐에 대한 대답이 있는지 알고 싶습니다.

답변

3

SQL Server에이 기능이 내장되어 있습니다 (replicate()). 이 첫 번째 인수로 동일한 유형을 반환하기 때문에

select replicate('</ul></li>', depth) 

, 당신은 cast()varchar(8000) 또는 varchar(max) 첫째로 값을 할 수 있습니다.