안녕하세요. 조덕진입니다.
저장프로시져를 사용하여, 자료를 분리한 후 저장을 하고 있습니다. 그런데 이미 저장된
자료에 대한 수정이 발생되어 저장프로시져를 호출하면, 해당 자료가 추가로 저장이
됩니다. 이를 해결하기 위해서 EXISTS를 사용했지만, 틀린것이 있는지 계속해서
같은 처리가 됩니다.
다음은 제가 작성한 저장프로시져입니다. 고수님들의 답변 기다리겠습니다.
작업환경 : 델파이4/윈98/SQL-SERVER 2000
CREATE procedure gather_goods_USP AS
declare @vcode char(6)
declare @v110code char(5)
declare @v120code char(5)
declare @vindate datetime
declare @vseqno char(10)
declare @vcl_name varchar(10)
declare @vcl_tel varchar(11)
declare @vcl_code varchar(11)
declare read_cursor1 cursor dynamic scroll for select gather_130code1, gather_110code,gather_120code,gather_date,gather_seq,gather_cl_name,gather_cl_tel,gather_cl_code from kpbgather
open read_cursor1
fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code while(@@fetch_status=0)
begin
if EXISTS (select a.* from gather_goods a where a.gt_gd_date = @vindate and a.gt_gd_seq = @vseqno and a.gt_110code = @v110code and a.gt_120code = @v120code and a.gt_cl_code = @vcl_code and a.gt_gd_code = @vcode)
begin
update gather_goods set gt_gd_date = @vindate, gt_gd_seq = @vseqno, gt_gd_code = @vcode, gt_110code = @v110code, gt_120code = @v120code, gt_cl_code = @vcl_code, gt_cl_name = @vcl_name, gt_cl_tel = @vcl_tel
end
else
begin
insert into gather_goods values (@vindate,@vseqno,@vcode,@v110code,@v120code,@vcl_name,@vcl_tel,@vcl_code)
end
fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code
end
close read_cursor1
if EXISTS (sql문장) then
수정
else
입력
이런식으로 처리하는것 맞는데 sql문장이 잘못된것 같네요.
where절에는 해당자료의 키값만 비교해서 넣어야 되는데 제가 얼핏보기에는 이전에 입력된
거의 모든 필드값을 다 비교하니까 수정한 값이 하나라도 있으면 다시 입력이 되겠죠.
키값이 그렇게 여러개일 가능성은 별로인것 같구요.
select절에 들어간 where의 키값비교가 그대로 나중에 update where절에도
들어가야 겠죠.
update 테이블명 set 수정되는 필드값 where 절
조덕진 wrote:
> 안녕하세요. 조덕진입니다.
>
> 저장프로시져를 사용하여, 자료를 분리한 후 저장을 하고 있습니다. 그런데 이미 저장된
> 자료에 대한 수정이 발생되어 저장프로시져를 호출하면, 해당 자료가 추가로 저장이
> 됩니다. 이를 해결하기 위해서 EXISTS를 사용했지만, 틀린것이 있는지 계속해서
> 같은 처리가 됩니다.
>
> 다음은 제가 작성한 저장프로시져입니다. 고수님들의 답변 기다리겠습니다.
>
> 작업환경 : 델파이4/윈98/SQL-SERVER 2000
>
> CREATE procedure gather_goods_USP AS
> declare @vcode char(6)
> declare @v110code char(5)
> declare @v120code char(5)
> declare @vindate datetime
> declare @vseqno char(10)
> declare @vcl_name varchar(10)
> declare @vcl_tel varchar(11)
> declare @vcl_code varchar(11)
>
> declare read_cursor1 cursor dynamic scroll for select gather_130code1, gather_110code,gather_120code,gather_date,gather_seq,gather_cl_name,gather_cl_tel,gather_cl_code from kpbgather
>
> open read_cursor1
> fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code while(@@fetch_status=0)
> begin
> if EXISTS (select a.* from gather_goods a where a.gt_gd_date = @vindate and a.gt_gd_seq = @vseqno and a.gt_110code = @v110code and a.gt_120code = @v120code and a.gt_cl_code = @vcl_code and a.gt_gd_code = @vcode)
> begin
> update gather_goods set gt_gd_date = @vindate, gt_gd_seq = @vseqno, gt_gd_code = @vcode, gt_110code = @v110code, gt_120code = @v120code, gt_cl_code = @vcl_code, gt_cl_name = @vcl_name, gt_cl_tel = @vcl_tel
> end
> else
> begin
> insert into gather_goods values (@vindate,@vseqno,@vcode,@v110code,@v120code,@vcl_name,@vcl_tel,@vcl_code)
> end
> fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code
> end
> close read_cursor1
>