데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
프로시저에서 임시테이블을 만들어서 특정테이블의 컬럼을 update하려 합니다.
프로시저를 아래와 같이 작성했는데, update 쿼리가 실행되지 않아서 질문드립니다.
프로시저를 어떻게 작성해야 하는 건가요?
업데이트 쿼리 : update Prod_stock set Rstock001 = Rstock001 + sum(Qty) where itmcd = p_code
Str_code는 varchar(3)이고, 001,002,003..., Rstock001은 integer 형식입니다.
P_code는 numeric, itmcd도 numeric입니다.
업데이트 관련 쿼리 : Select Str_code, P_code, Sum(Qty) From Ven_dt
where S_date between @Bday AND @Aday Group by Str_code, P_code
alter PROC usp_Ven_Dt
AS
Begin
Declare
@Dayvalue varchar(8),
@Aday varchar(8),
@Bday varchar(8),
@query NVARCHAR(MAX)
Select @Dayvalue = CONVERT(VARCHAR, GETDATE(), 112)
set @Aday = convert(varchar(8), dateadd(day, 1, @Dayvalue), 112) --내일
set @Bday = convert(varchar(8), dateadd(day, -1, @Dayvalue), 112) --어제
SELECT ' UPDATE Prod_stock SET Rstock'+Str_code+' = Rstock'+Str_code+' + ' + CONVERT(NVARCHAR, SUM(Qty)) +
' WHERE itmcd = ''' + P_code + '' AS query INTO #temp
FROM Ven_Dt WHERE S_date BETWEEN @Bday AND @Aday
GROUP BY Str_code, P_code
WHILE EXISTS(SELECT 1 FROM #temp)
BEGIN
SELECT TOP 1 @query = query FROM #temp
EXEC (@query)
DELETE FROM #temp WHERE query = @query
END
DROP TABLE #temp
Delete From Ven_Dt where S_date between @Bday and @Aday