2010-01-04 5 views
0

J'écris la procédure stockée pour la mise à jour.Mettre à jour la procédure stockée?

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 

mais il donne une erreur comme ce

syntaxe incorrecte près du mot-clé « mise à jour ».

+3

Pour des raisons de performance, vous feriez mieux de préfixer pas votre procédure stockée avec SP. Lorsque vous faites cela, SQL Server cherchera d'abord dans la base de données principale pour trouver la procédure stockée, et seulement s'il ne la trouve pas là, il la recherchera dans la base de données courante. –

+0

merci Mr.Frederik gheysels. Vous dites que ne pas préfixer sp alors comment puis-je écrire, comme "créer une procédure videos_insert" est-il ok –

Répondre

2

Surya,

D'après ce que je vous rassemblerai cherchez à revenir de la proc 1 ou 0 selon si des enregistrements ont été mis à jour à partir de votre proc. Je suis d'accord que @@ ROWCOUNT est où vous devez aller, essayez ce code:

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

Merci Mr.Tj Kellie ça marche bien –

6

Vous ne pouvez pas définir une variable sur une instruction UPDATE. Si vous essayez d'obtenir le nombre de lignes à la fin de la mise à jour, essayez ceci:

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

je ne vous comprends pas Mr.David M –

+0

La première ligne de votre procédure tente de définir la valeur d'une variable 'int' être une déclaration de mise à jour. Je pense que ce que vous voulez définir est le nombre de lignes affectées par l'instruction de mise à jour. C'est ce que le code que je vous ai donné fait. –

+0

ok alors le code mettra à jour les vidéos set [views] = [views] +1 set @ ret = (sélectionnez le compte (*) des vidéos où videoid = @ videoid) if (@ret> 1) set @ ret = 1 sinon set @ ret = 0 am right –

Questions connexes