[必须声明@Action变量时,我在SSMS中运行存储过程时遇到错误

问题描述 投票:0回答:1
CREATE PROCEDURE Insertupdateemployee (
    @Id INTEGER
    ,@Name NVARCHAR(50)
    ,@Salary INTEGER
    ,@Age INTEGER
    )
AS
BEGIN
    IF @Action = 'Insert'
    BEGIN
        INSERT INTO employee (
            Name
            ,Salary
            ,age
            )
        VALUES (
            @Name
            ,@Salary
            ,@Age
            ,
            );
    END

    IF @Action = 'Update'
    BEGIN
        UPDATE employee
        SET NAME = @Name
            ,Salary = @Salary
            ,age = @Age
        WHERE employeeid = @Id;
    END
END

执行上述sp时,出现以下错误;

消息137,级别15,状态2,过程Insertupdateemployee,第8行[批处理[第9行开始]必须声明标量变量“ @Action”。讯息102,第15级,州1,程序Insertupdateemployee,第18行[批处理起始行9]')'附近的语法不正确。消息137,第15级,州2,过程Insertupdateemployee,第20行[批处理开始第9行]声明标量变量“ @Action”。

sql sql-server ssms
1个回答
0
投票

您可以通过以下方式纠正错误并改进查询。

您需要为该操作添加一个以上参数,并将其倍数更改为If..Else If

CREATE PROCEDURE Insertupdateemployee (
    @Id INTEGER
    ,@Name NVARCHAR(50)
    ,@Salary INTEGER
    ,@Age INTEGER
    ,@Action VARCHAR(10)
    )
AS
BEGIN
    IF @Action = 'Insert'
    BEGIN
        INSERT INTO employee (
            Name
            ,Salary
            ,age
            )
        VALUES (
            @Name
            ,@Salary
            ,@Age
            ,
            );
    END
    ELSE IF @Action = 'Update'
    BEGIN
        UPDATE employee
        SET NAME = @Name
            ,Salary = @Salary
            ,age = @Age
        WHERE employeeid = @Id;
    END
END

另一种方法是在存储过程中声明自身,在这种情况下,您需要使用select语句设置变量的值,如下所示。

declare @Action varchar(20)
© www.soinside.com 2019 - 2024. All rights reserved.