La procédure SQL n'a pas de parameters et les arguments ont été fournis

Donc, voici le code pour la procédure stockée et mon exécution. Je continue à recevoir ce message lorsque j'essaie d'exécuter ma command:

Msg 8146, niveau 16, état 2, procédure sp_LabelFilm, ligne 0
La procédure sp_LabelFilm n'a pas de parameters et les arguments ont été fournis.

Une idée pourquoi? J'essaie de mettre à jour une colonne dans la table tblfilm pour dire si un film est court, moyen ou long selon son time d'exécution.

ALTER PROCEDURE [dbo].[sp_LabelFilm] AS BEGIN DECLARE @Minutes INT, @duration char(10) DECLARE Filmcursor CURSOR FOR (SELECT filmruntimeminutes, Duration FROM tblFilm) OPEN filmcursor FETCH NEXT FROM filmcursor INTO @duration WHILE (@@FETCH_STATUS = 0) BEGIN SELECT @Minutes = FilmRunTimeMinutes FROM tblFilm IF @Minutes < 120 SET @duration = 'short' ELSE IF @Minutes < 150 SET @duration = 'medium' ELSE SET @duration = 'long' FETCH NEXT FROM filmcursor INTO @duration UPDATE tblFilm SET Duration = @duration END CLOSE filmcursor DEALLOCATE filmcursor END DECLARE @Minutes INT, @duration CHAR(10) EXECUTE [dbo].[sp_LabelFilm] @minutes, @duration 

l'erreur signifie exactement ce qu'elle dit. Que vous passez des arguments (variables @minutes et @duration ) mais aucun paramètre n'est défini sur la procédure stockée.

Pour déclarer les parameters (variables d'input) vous les déclarez réellement avant l' AS comme ceci:

 use Movies go alter PROC [dbo].[sp_LabelFilm] @Minutes INT ,@duration CHAR(10) AS BEGIN DECLARE Filmcursor CURSOR ...... 

Notez que vous n'avez pas besoin d'utiliser le mot-key DECLARE et une fois qu'ils sont déclarés comme parameters, vous n'avez pas besoin de les déclarer à nouveau.

Ensuite, je ne suis pas tout à fait sûr de ce que vous essayez d'accomplir avec les parameters dans la procédure stockée, mais il semble que vous ne vouliez pas les passer, mais plutôt que vous voulez les get comme cela serait:

 use Movies go alter PROC [dbo].[sp_LabelFilm] @Minutes INT OUTPUT ,@duration CHAR(10) OUTPUT AS BEGIN DECLARE Filmcursor CURSOR .... 

Et votre déclaration d'exécution ressemblerait à ceci:

 declare @Minutes INT, @duration char(10) execute [dbo].[sp_LabelFilm] @minutes = @Minutes OUTPUT, @duration = @duration OUTPUT 

J'avais défini les parameters sur la procédure stockée, avant l'AS, mais j'étais toujours confronté au même problème jusqu'à ce que je réalise que la procédure avait 'créer' au lieu de 'modifier'. Le changer pour modifier la procédure a fonctionné pour moi. (J'ai fait face à ce problème pendant que j'essayais de déboguer).