这是存储过程和我的执行的代码。当我尝试执行命令时,我不断收到此消息:
消息 8146,级别 16,状态 2,过程 sp_LabelFilm,第 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
该错误的含义与它所说的完全一样。您正在传递参数(变量@minutes
and @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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)