SQL Procedure没有提供参数和参数

时间:2016-12-04 20:57:13

标签: sql-server stored-procedures execute

所以这是存储过程和执行的代码。当我尝试执行命令时,我不断收到此消息:

  

Msg 8146,Level 16,State 2,Procedure sp_LabelFilm,Line 0
  过程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

3 个答案:

答案 0 :(得分:8)

错误意味着它的内容。你传递的是参数(变量@minutes@duration)但是在存储过程中没有定义参数。

要声明参数(输入变量),您实际在AS之前声明它们,如下所示:

use Movies
go

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

BEGIN


DECLARE Filmcursor  CURSOR 
......

请注意,您不需要使用关键字DECLARE,一旦声明为参数,您实际上不需要再次声明它们。

接下来我不完全确定你试图用存储过程中的参数完成什么,但它实际上看起来你不想传递它们而是你想把它们当作输出来像这样:

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

答案 1 :(得分:1)

我在AS之前已经在存储过程中定义了参数,但在我意识到该过程已经创建了&#39;之前我仍然遇到了同样的问题。而不是改变&#39;。更改它以改变程序对我有用。(在我尝试调试时面对这个问题)。

答案 2 :(得分:0)

除了第一个合适的答案之外-在我的情况下,我没有任何参数,而EXEC遇到类似错误。

但是区别是-我在EXEC语句的下面加了一个“去”。

删除go之后,它已正确执行。