database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5905 게시물 읽기
No. 5905
CTE를 사용해서 BOM구조를 가져온 리스트를 테이블처럼 사용하려면 어떻게 해야 할까요..
작성자
장준일(jangjunil)
작성일
2011-06-15 18:42
조회수
9,062

 mssql 2005 입니다.

 

BOM 구조를 구현하려고 하는데요.

가져온 리스트하고 다른 테이블하고 조인해서 사용하고 싶은데 도무지 방법이 떠오르지 않네요.
카테고리를 쓰는 테이블이 여러개라서 동적으로 구현하려고 하는데 잘안되네요.

고수님들 답변 부탁드립니다.

감사합니다.

시도방법 1

프로시저 생성.

CREATE PROCEDURE [dbo].[SP_BOM]

(@tblName varchar(100), @idx varchar(100), @pidx varchar(100), @name varchar(100), @whereIdx varchar(100))

WITH 

EXECUTE AS CALLER

AS

declare @sql nvarchar(4000)

declare @sqlwhere nvarchar(4000)

set @sqlwhere = ''

if @whereIdx > 0

begin

set @sqlwhere = 'and '+@idx+'=' + @whereIdx

end

set @sql = N'

With CTE(ridx, rname, rpidx, rlevel, rsortcol)  

As (  

-- C1

Select '+@idx+' as ridx, '+@name+' as rname, '+@pidx+' as rpidx, 1 As rlevel, CAST('+@idx+' AS VARBINARY(900)) as rsortcol

From '+@tblName+'

Where ('+@pidx+' is null or '+@pidx+'=0) '+@sqlwhere+'

 

Union all 

-- M2  

Select C.'+@idx+' as ridx, C.'+@name+' as rname, C.'+@pidx+' as rpidx, CC.rlevel + 1, CAST(rsortcol + CAST(C.'+@idx+' AS BINARY(4)) AS VARBINARY(900)) as rsortcol

From '+@tblName+' C inner join CTE CC  

On C.'+@pidx+' = CC.ridx

)

Select * From CTE order by rsortcol;

'

select * from (execute sp_bom '테이블', ' -> 에러..

 

시도방법 2

함수 생성.

ALTER function [dbo].[FN_BOM](

@tblName varchar(100),

@idx varchar(100),

@pidx varchar(100),

@name varchar(100),

@whereIdx int

)

RETURNS @returnTABLE TABLE(

ridx int,

rname varchar(100),

rpidx int,

rlevel int,

rsortcol binary(900)

)

AS

BEGIN

declare @sql nvarchar(4000)

INSERT INTO @returnTABLE execute sp_bom 'stock_category', 'stc_idx', 'stc_pidx', 'stc_name', '0';

RETURN;

프로시저를 참조하여 table 형식으로 리턴 -> 에러 

파생작업을 생성하거나 시간에 종속적인 연산자를 잘못사용했다고 나옴.

 

시도방법3

커서를 만들어서 프로시저 참조.

declare @ridx int

declare @rname varchar(100)

declare @rpidx int

declare @rlevel int

declare @rsortcol binary(900)

declare @strSql varchar(1000)

 

DECLARE cursor_bom CURSOR FOR

sp_bom 'stock_category', 'stc_idx', 'stc_pidx', 'stc_name', '0';

OPEN cursor_bom

FETCH NEXT FROM cursor_bom INTO @ridx, @rname, @rpidx, @rlevel, @rsortcol

WHILE(@@FETCH_STATUS = 0 )

BEGIN

  select @ridx, @rname, @rpidx, @rlevel, @rsortcol

  FETCH NEXT FROM cursor_bom INTO @ridx, @rname, @rpidx, @rlevel, @rsortcol

END

CLOSE cursor_bom

에러

select 구문이 아니면 안되는듯..

 

 

이 글에 대한 댓글이 총 1건 있습니다.
wlskrkekrk님이 2011-06-17 20:42에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5908디비 통합 관련 질문 드립니다.
윤영덕
2011-06-22
6780
5907로그인,로그오프 로그에 관한질문
김형태
2011-06-20
6424
5906이게 가능한가요? [5]
박정원
2011-06-17
7038
5905CTE를 사용해서 BOM구조를 가져온 리스트를 테이블처럼 사용하려면 어떻게 해야 할까요.. [1]
장준일
2011-06-15
9062
5904전체 텍스트 인덱스 활성화 시키려면?
문승원
2011-06-15
6737
5903한 컬럼의 값에 따라 다른컬럼을 ceiling 하려 합니다. [1]
박정원
2011-06-14
6452
5902살려주세요~ [1]
신입초짜
2011-06-07
7576
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다