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”。
您可以通过以下方式纠正错误并改进查询。
您需要为该操作添加一个以上参数,并将其倍数更改为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)