gpt4 book ai didi

sql-server - SQL 过程没有参数并且提供了参数

转载 作者:行者123 更新时间:2023-12-02 10:46:13 26 4
gpt4 key购买 nike

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

Msg 8146, Level 16, State 2, Procedure sp_LabelFilm, Line 0
Procedure sp_LabelFilm has no parameters and arguments were supplied.

知道为什么吗?我正在尝试更新表 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@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

关于sql-server - SQL 过程没有参数并且提供了参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40963561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com