首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Msg 137,第15级,状态2,服务器ip-172-31-36-11,第2行必须声明标量变量"@Deptno“

Msg 137,第15级,状态2,服务器ip-172-31-36-11,第2行必须声明标量变量"@Deptno“
EN

Stack Overflow用户
提问于 2021-05-13 05:41:08
回答 1查看 58关注 0票数 0

我的存储过程(下面)给出了以下错误:

Msg 137,级别15,状态2,服务器ip-172-31-36-11,第2行必须声明标量变量"@Deptno“

代码语言:javascript
复制
CREATE PROCEDURE EmployeesDept 
    @Deptno char(3) 
AS 
    SELECT lastname AS Name 
    FROM Employee 
    WHERE workdept = @Deptno
GO

EXECUTE EmployeesDept @Deptno
GO
EN

回答 1

Stack Overflow用户

发布于 2021-05-13 05:44:21

当涉及到执行一个存储过程时,如果您想让它工作,就必须给出参数值,并且您可以按位置或名称执行。您可以直接将值放入其中,也可以将值存储在变量中,并使用这些变量将值赋给存储过程。

代码语言:javascript
复制
--direct values 
execute EmployeesDept 'abc', 0 --positional 
execute EmployeesDept @Deptno='abc', @whatever=0 --named parameters 

--values from variables
DECLARE @n CHAR(3) = 'abc';
DECLARE @i INT = 0;

execute EmployeesDept @n, @i --position based
execute EmployeesDept @Deptno = @n, @whatever = @i --name based

基于命名的参数不必按顺序排列,位置参数必须按顺序排列。

创建过程的一个更好的习惯(为了将您的技能带到另一个DB)是这样的:

代码语言:javascript
复制
CREATE PROCEDURE EmployeesDept (
  @Deptno char(3)
) AS

在参数列表周围加上括号。对于两个或多个args,用逗号分隔。示例:

代码语言:javascript
复制
CREATE PROCEDURE EmployeesDept (
  @Deptno char(3),
  @whatever INT
) AS

还养成了用分号结束存储过程中的每个语句的习惯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67514396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档