WorkaHolic

계층적인 구조로 데이터를 표시하는 스크립트

2010. 4. 8. 22:36
반응형

저자: Adrian Rupp

트리 뷰 콘트롤(Tree View Control)과 같이 계층적으로 구성된 데이터를 필요로 하는 경우에 사용할 수 있는 스크립트다.
Varchar(4000) 타입의 문자열을 프로시저에 넘겨준 다음 이 루틴을 사용해서 파싱을 하면 된다. 확장된(Extended) 스토어드 프로시저인 xp_Tokenize 와는 DLL이 아닌 스크립트로 구성되었다는 점만 다를 뿐 기능은 동일하다.

--This is used for a situation where you may have a
--tree view control that you need to select data that
--belongs to the parent and all its children.
--Just pass a string (varchar(4000)) to the proc
--as a parameter. Then use this routine to parse it out.
--This will work like the xp_Tokenize Extended stored procedure
--without using an XP_...
--

 

DECLARE  @project_ids varchar(4000),
  @project_id int

SELECT @project_ids   = '1,2,3,4,5,6,7,8,9'


SET NOCOUNT ON
--Set some variables (project ID)
 IF RIGHT(@project_ids,1) <> ','    --make sure it has a trailing comma
  SELECT @project_ids = @project_ids + ','

--Create Temp table to hold all the project ID's
 CREATE TABLE #tPROJECT (project_id int NULL)
 WHILE CHARINDEX( ',' , @project_ids) > 0
 BEGIN
  SELECT  @project_id =  convert(numeric,substring(@project_ids,1,CHARINDEX( ',' , @project_ids) - 1))
  SELECT  @project_ids =  substring(@project_ids, datalength(rtrim(@project_ids))  -
     ((datalength(rtrim(@project_ids))  - datalength(rtrim(@project_id))) - 2), 4000)
 
  INSERT INTO #tPROJECT SELECT @project_id
 END


SET NOCOUNT OFF 
--Use like this...
 SELECT   y.project_id,
   y.field1,
   y.field2,
   y.field3,
   y.field4

 FROM  YourTable y

 WHERE y.project_id IN (SELECT project_id FROM #tPROJECT)

/*********************************************
Adrian Rupp
Developer
SPC Compuware Corp.  for
KPMG at Wright-Patterson Air Force Base
Dayton Ohio

adrian@rupp.net
************************************************/

반응형