2010-01-04 7 views
0

업데이트 용 저장 프로 시저를 작성합니다.저장 프로 시저를 업데이트 하시겠습니까?

create procedure sp_videos_updateviews (@videoid varchar(50),@ret int output) 
as 
    set @ret = update videos set [views]=[views]+1 
    where videoid = @videoid 

    if(@ret>1) 
    begin 
    set @ret=1 
    end 
    else 
    begin 
    set @ret=0 
    end 

하지만 키워드 '갱신'근처에서이

구문이 같은 오류를주고있다.

+3

성능상의 이유로을, 당신은 SP와 저장 프로 시저를 앞에 NOT 더 나은 것입니다. 이렇게하면 SQL Server는 먼저 마스터 DB에서 해당 저장 프로 시저를 검색하여 해당 데이터베이스가없는 경우에만 현재 DB에서 해당 데이터베이스를 찾습니다. –

+0

Mr.Frederik gheysels 감사합니다. 당신은 그 다음에 접두사를 쓰지 말라고 말하면서 "create procedure videos_insert"처럼 쓸 수 있어요. 괜찮아요. –

답변

2

수르야,

을 나는 당신이 1 또는 0에 따라 시저에서 반환을 찾고 있습니다 모여 무슨에서 proc에서 레코드가 업데이트 된 경우. 내가 @@ ROWCOUNT하면, 이동이 코드를 시도해야 어디에 동의 :

create procedure proc_videos_updateviews (@videoid varchar(50),@ret int output) 
as 

update videos set [views]=[views]+1 
where videoid = @videoid 

if(@@ROWCOUNT > 0) 
begin 
    set @ret = 1 
end 
else 
begin 
    set @ret = 0 
end 
+0

Mr.Tj Kellie 감사합니다. 잘 작동합니다. –

6

변수를 UPDATE 문으로 설정할 수 없습니다. 업데이트의 끝 부분에있는 행 수를 얻기 위해 시도하는 경우,이 시도 :

UPDATE vidoes SET [views] = [views] + 1 
WHERE videoid = @videoid 
SET @ret = @@ROWCOUNT 
+0

당신이 못 봤어요 Mr.David M –

+0

프로 시저의 첫 줄에서'int' 변수의 값을 설정하려고합니다. 갱신 진술. 당신이 설정하고자하는 것은 update 문에 의해 영향을받는 행들의 수입니다. 그것이 내가 여러분에게 준 코드입니다. –

+0

그러면 코드가 비디오 세트를 업데이트합니다. [뷰] = [뷰] +1 @ret = 비디오에서 카운트 (* 선택) 여기서 videoid = @ videoid if (@ret> 1) @ ret = 1 else set @ ret = 0 am right –

관련 문제