안녕하세요.

SQL을 5년이 넘게 접해왔지만 아직도 초급 수준을 벗어나지 못하고 있네요...

도움을 받을 수 있을까 하여 이곳에 질문을 드립니다.


저희 회사에서 ERP 프로그램을 사용 중입니다.

이 프로그램에는 품목코드와 품목정보가 담긴 ITEM_MASTER라는 테이블이 존재합니다.

그런데 이번에 기존 품목코드 중 일부 (약 1500개) 품목코드가 새로운 품목코드로 변경 되어야 합니다.


예를들면 다음과 같습니다.

기존 품목코드 AAA-11-ABCD-00 를

신규 품목코드 BBB-12-ZZZ 로 모두 변경.


ERP에서 품목코드는 모든 프로세스의 기준이 되는 존재이므로

ITEM_MASTER (품목정보 테이블) 에서만 품목코드를 변경해선 안되고

품목코드가 존재하는 모든 테이블에서 변경사항이 적용 되어야 합니다.


때문에 SP를 만들어서 처리하고자 합니다.


일단은 DB내에 존재하는 모든 테이블에서 ITEM_CODE(품목코드 컬럼명) 컬럼이 존재하는 테이블 목록을 구한 뒤

해당 테이블들의 레코드를 가져와서 기존 품목코드를 신규 품목 코드로 변경해 주려고 합니다.


이 작업을 위해 제가 지금 정리한 내용은 다음과 같습니다.


1. 품목코드 변경 기준 테이블 EX_ITEM_MASTER 생성

   이 테이블에는 기존품목코드, 품목명, 단위, 단가, 거래처 ... 등의 정보가 있고 마지막 컬럼에 신규 품목코드 컬럼인

   NEW_CODE 컬럼이 존재합니다.


2. 품목코드 변경용 SP제작


-- 일단 ITEM_CODE 컬럼이 존재하는 모든 테이블 목록을 가져온다. --

Select b.name as TableName, a.name as FieldName, a.length 

From syscolumns a with(nolock), sysobjects b with(nolock) 

Where a.id = b.id and 

a.name like 'ITEM_CODE' and 

b.type = 'U' and a.length = 13

ORDER BY B.name ASC


위 쿼리를 이용하니 ITEM_CODE 컬럼이 존재하는 모든 테이블을 구할 수 있었습니다.

레코드 결과는 '테이블명', '필드명', '길이' 입니다.


위 레코드 결과를 LOOP 돌리면서 각 테이블마다 ITEM_SCODE 값을 가져온 뒤

만약 해당 품목코드가 EX_ITEM_MASTER(기존/신규 품목코드 정보) 테이블의 레코드와 일치하는 것이 있다면

EX_ITEM_MASTER 테이블의 NEW_CODE 값으로 UPDATE 해줍니다.


이러한 내용을 SP로 제작하여 다음과 같이 수행하고 싶습니다.


EXECUTE sp_exchange_code 'DB명'


sp 뒤에 DB명을 파라미터로 전달하는 이유는 일단 테스트 DB에서 수행해 본 뒤 실제 DB에서

수행하는 것을 구분지어 주기 위함입니다.


SP제작이 완전 생 초보라 어디서부터 손을 대야 할지 모르겠습니다.

비슷한 유형의 SP 정보나 위 조건에 따른 SP 제작을 위해 도움을 받을 수 있을까요?


긴 글 읽어 주셔서 감사합니다.


----------------------------------------------------------------------------------

추가 글

답변 기다리는 동안 제가 만들어 봤는데요...

이게 맞는건지 문제는 없는지 휴... 조언좀 부탁드릴께요.


CREATE procedure [dbo].[sp_exchange_code]

@dbName nchar(8), -- 코드변경 적용할 DB명

AS

Begin

Set NOCOUNT ON


-- 변수 설정 --

DECLARE @TableName nvarchar(32), @FieldName nchar(8), @Length int /* ITEM_CODE 존재하는 테이블 정보 */

, @strSQL nvarchar(4000) /* Query 수행문 저장 변수 */

, @curSQL nvarchar(4000) /* 커서에서 동적쿼리 사용을 위한 변수 */

-- 커서 선언 : ITEM_CODE 컬럼을 가진 모든 테이블 수 만큼 반복 --

Set @curSQL = 'DECLARE CUR_TBL CURSOR FOR '

+ ' Select b.name as TableName, a.name as FieldName, a.length '

+ ' From ' + @dbName + '..syscolumns a with(nolock), ' + @dbName + '..sysobjects b with(nolock) '

+ ' Where a.id = b.id and UPPER(a.name) like ''ITEM_CODE'' and b.type = ''U'' and a.length < 512 '

+ ' ORDER BY B.name ASC'

EXEC sp_executesql @curSQL

-- 커서를 열고 --

OPEN CUR_OS

-- 첫행을 읽어온다. (첫 테이블 정보)

FETCH NEXT FROM CUR_TBL INTO @TableName, @FieldName, @Length

-- 마지막 행까지 반복 (ITEM_CODE 컬럼이 존재하는 테이블 개수만큼 반복)

While @@FETCH_STATUS = 0

BEGIN

-- ITEM_CODE 기존 품목코드를 신규 품목코드로 변경

Set @strSQL = 'update ' + @dbName + '..' + @TableName + ' set ITEM_CODE = CTR.NEW_CODE from'

+ EX_ITEM_MASTER CTR '

+ ' where ' + @dbName + '..' + @TableName + '.ITEM_CODE = CTR.ITEM_CODE'

-- 다음 레코드(테이블)로 이동

FETCH NEXT FROM CUR_TBL INTO @TableName, @FieldName, @Length

END

-- 커서를 닫고 종료

CLOSE CUR_TBL

DEALLOCATE CUR_TBL

END

GO

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 451
6970 IDENTITY관련... [1] 메칸더 2013.07.08 4865
6969 두테이블 쿼리 문의 드립니다. [2] chs217 2013.07.07 4722
6968 파티션 테이블로 전환 및 과거 데이터 삭제 관리 방안 운스 2013.07.05 8702
6967 함수기반 인덱스(Function based index)를 어떻게 생성하는지요? [5] 김시준 2013.07.05 11305
6966 최초실행시 시간이 걸리는 문제 [3] 전념 2013.07.05 5199
6965 MSSQL200에서 MSSQL2012로 변경시 문제점 [1] 떨거지희 2013.07.05 6170
6964 (프로시저)쿼리 순서 질문이 있습니다. [2] alima 2013.07.05 5432
6963 SQL인증, Windows 인증 모두 안될때?? [1] 뷰롱이 2013.07.04 7256
6962 [질문] sql2012 와 vb 윈폼으로 cs프로그램을 만들려고 합니다. [1] 이운석 2013.07.04 6517
6961 질문드립니다. 기본 하위 카테고리 정률 후 상위 묶음단위 카테고리 정렬이 가능할까요?? [1] 권오현_276823 2013.07.04 5187
6960 서비스 브로커 전송큐에 최대한 맥스 몇개 까지 쌓여야지 전달 잘되는지 알수있나요? [1] 로쏘네리 2013.07.04 5126
» 품목코드 컬럼이 존재하는 모든 테이블에서 기존 품목코드를 신규 품목코드로 변경 [2] 래리 2013.07.04 5706
6958 행으로 나열된 데이터를 열로 출력하려면? [4] 아킬레스 2013.07.04 5401
6957 하루에 한번씩 쿼리 지연이 일어납니다. [5] 아드럽투 2013.07.03 6178
6956 쿼리 결과 메세지를 변수로 받을 수 있을까요? [1] 위대한상속 2013.07.03 5103
6955 고객관리프로그램 DB 관련문의ㅠㅜ [6] 파인드쿠폰 2013.07.03 5749
6954 서비스 브로커 전송큐에있는거 재처리하는 방법좀알려주세요 급합니다 로쏘네리 2013.07.03 4498
6953 용량큰 테이블 삭제 해도 db용량은 줄어들지 않나요? [2] dcman 2013.07.03 13518
6952 sa 계정의 암호 변경 후.. 이상한 증상.. [4] 표현중독 2013.07.02 5413
6951 간단한 분기문 처리 [2] 태근이 2013.07.01 5006





XE Login