【问题标题】:Must declare the scalar variable "@id" error with stored procedure必须用存储过程声明标量变量“@id”错误
【发布时间】:2018-11-29 13:16:36
【问题描述】:

我用光标得到了这个过程

CREATE PROCEDURE usp_Inventario
AS
    DECLARE @Id int, @Nombre varchar(255), @precio decimal, @st int, @inv int
    SET @inv = 0

    DECLARE cproducto CURSOR FOR
        SELECT P.ProductID, P.ProductName, P.UnitPrice, P.UnitsInStock
        FROM Products P

OPEN cproducto

FETCH cproducto INTO @id, @Nombre, @precio, @st

WHILE (@@FETCH_STATUS = 0)
BEGIN
    PRINT Str(@id) + space(5) + str(@nombre) + space(5) +  Str(@precio) + space(5) + Str(@st)

    SET @inv += @st

    FETCH cproducto INTO @id, @Nombre, @precio, @st
END

CLOSE cproducto
DEALLOCATE cproducto 

PRINT 'Inventario de Productos:' + Str(@inv)

我收到这个错误

必须声明标量变量“@id”

多次,谁能告诉我我做错了什么?

【问题讨论】:

  • 请说明您使用的是什么关系型数据库。
  • SQL SERVER 2017 使用 NORTHWND 数据库
  • 您的数据库排序规则是否区分大小写?你用大写声明了@Id,但使用了@id
  • 不区分大小写
  • 您粘贴的查询不会产生该错误(只要顶部和底部在同一范围内)...

标签: sql sql-server stored-procedures database-cursor


【解决方案1】:

至少,你需要begin/end

CREATE PROCEDURE usp_Inventario
AS
BEGIN
    DECLARE @Id int, @Nombre varchar(255), @precio decimal, @st int, @inv int;
    SET @inv=0;
    DECLARE cproducto CURSOR FOR
    SELECT  P.ProductID, P.ProductName, P.UnitPrice, P.UnitsInStock
    FROM Products P;

    . . .
END;

【讨论】:

  • 它仍然说:必须声明标量变量“@id”:(
  • @Bata。 . . @id 在存储过程中声明。你所有的代码都在beginend之间吗?
  • 是的,就是这样
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 2015-01-08
  • 2016-04-17
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多