2016-12-04 6 views
2

これはストアドプロシージャと私の実行のコードです。 0
手順sp_LabelFilmパラメータがないと引数が与えられたSQLプロシージャにはパラメータがありません。引数は提供されました

メッセージ8146、レベル16、状態2、手順sp_LabelFilm、ライン:私は私のコマンドを実行しようとすると、私はこのメッセージを得続けます。

何故でしょうか?私は、テーブルtblfilmの列を更新して、ムービーが実行時間に基づいて短、中、または長かどうかを判断しようとしています。

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 
+0

サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

7

エラーとは、そのエラーを意味します。引数(変数@minutes@duration)を渡していますが、ストアドプロシージャに定義されているパラメータはありません。あなたが実際にそのようAS前にそれらを宣言したパラメータ(入力変数)を宣言する

:彼らはパラメータあなたはドンとして宣言されると、あなたがキーワードDECLAREを使用する必要がありません

use Movies 
go 

alter PROC [dbo].[sp_LabelFilm] 
    @Minutes INT 
    ,@duration CHAR(10) 
AS 

BEGIN 


DECLARE Filmcursor CURSOR 
...... 

お知らせ実際にもう一度宣言する必要があります。

次ストアドプロシージャのパラメータで何を達成しようとしているのかは完全にはわかりませんが、実際にはパスしたくないように見えますが、この:

use Movies 
go 

alter PROC [dbo].[sp_LabelFilm] 
    @Minutes INT OUTPUT 
    ,@duration CHAR(10) OUTPUT 
AS 

BEGIN 


DECLARE Filmcursor CURSOR 
.... 

そして、あなたの実行文は次のようになります。

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

私は以前のように、ストアドプロシージャのパラメータを定義していたが、私は実現するまでまだ私は同じ問題に直面していましたプロシージャに「作成」機能があること「変更」の教訓。手続きを変更するためにそれを変更することは私のために働いた(私がデバッグしようとしていた間にこの問題に直面した)。

関連する問題