Sql server SQL Server存储过程错误(员工加薪)
我正在尝试执行一个存储过程,在该过程中,我给员工加薪,但我似乎不明白我做错了什么,它给了我以下错误 Msg 8115,第16级,第8状态,程序ClerkPayRise,第8行Sql server SQL Server存储过程错误(员工加薪),sql-server,sql-server-2008,stored-procedures,sql-server-2012,Sql Server,Sql Server 2008,Stored Procedures,Sql Server 2012,我正在尝试执行一个存储过程,在该过程中,我给员工加薪,但我似乎不明白我做错了什么,它给了我以下错误 Msg 8115,第16级,第8状态,程序ClerkPayRise,第8行 将数值转换为数据类型数值时出现算术溢出错误 我的存储过程的代码是: CREATE PROCEDURE ClerkPayRise (@clerkID VARCHAR (50), @clerkPayrate DECIMAL(3, 2)) AS BEGIN
将数值转换为数据类型数值时出现算术溢出错误 我的存储过程的代码是:
CREATE PROCEDURE ClerkPayRise (@clerkID VARCHAR (50),
@clerkPayrate DECIMAL(3, 2))
AS
BEGIN
UPDATE clerks
SET clerkPayrate = clerkPayrate + @clerkPayrate
WHERE clerkID = @clerkID
IF @@ROWCOUNT = 1
SELECT 'The Hourly Pay Rise for Clerk: ' + (SELECT clerkFName + ' ' + clerkSName
FROM clerks
WHERE clerkID = @clerkID) + 'Was Successful'
ELSE
SELECT ' The Increase in Hourely Pay rate Failed, No Clerk with ID ; ' + CAST(@clerkID AS VARCHAR (50))
END
EXECUTE ClerkPayRise
clerk01,
0.25
GO
DROP PROCEDURE ClerkPayRise
我使用的样本数据如下:
CREATE TABLE clerks
(
clerkID VARCHAR (20) NOT NULL,
clerkFName VARCHAR (20),
clerkSName VARCHAR (20),
clerkPayrate DECIMAL(3, 2),
PRIMARY KEY (clerkID),
);
INSERT INTO clerks
VALUES ('clerk01' ,'Alex','Richards',7.49);
INSERT INTO clerks
VALUES ('clerk02', 'Jason','Elliot',8.25);
INSERT INTO clerks
VALUES ('clerk03', 'Mark','Alleyne',8.25);
INSERT INTO clerks
VALUES ('clerk04', 'Ricky','Ponting',8.00);
INSERT INTO clerks
VALUES ('clerk05', 'Nick','Lamb',8.75);
我将非常感谢您的指导和帮助您犯了以下错误
如果存储过程中存在任何问题,请进行更正,以便我可以帮助您。您缺少存储过程正文和存储过程执行语句之后的
GO
批处理终止符。这会导致EXEC
语句成为存储过程的一部分,因此存储过程会递归调用自身,直到出现算术溢出
CREATE PROCEDURE ClerkPayRise (@clerkID VARCHAR (50),
@clerkPayrate DECIMAL(3, 2))
AS
BEGIN
UPDATE clerks
SET clerkPayrate = clerkPayrate + @clerkPayrate
WHERE clerkID = @clerkID
IF @@ROWCOUNT = 1
SELECT 'The Hourly Pay Rise for Clerk: ' + (SELECT clerkFName + ' ' + clerkSName
FROM clerks
WHERE clerkID = @clerkID) + 'Was Successful'
ELSE
SELECT ' The Increase in Hourely Pay rate Failed, No Clerk with ID ; ' + CAST(@clerkID AS VARCHAR (50))
END
GO --need this terminator
EXECUTE ClerkPayRise
'clerk01', --also enclose string literals in single quotes
0.25
GO
适用于我(一旦我在
办事员表中添加了“角色”列),并返回“办事员每小时加薪:Alex RichardsWas Successful”。您是否将某人增加到9.99以上?您的insert语句的值比列的值多。请解决此问题。您的解决方案也可以正常工作。尽管您可以在这里找到有关错误的更多详细信息:嗨,马丁,我已经编辑了表格并插入了对账单,请看一看,我只是想给员工加薪0.25美分,只是想更新职员工资率列允许在创建表
中使用尾随逗号,但在声明中不允许。。TABLE
-谢谢Utlesh,我已经编辑了表格和inset语句,现在请看一下,我只想更新“职员工资率”列,其他什么都不想,所以通过提供职员ID和增长率的输入参数,我只是想更新员工的工资率,例如,如果亚历克斯·理查兹得到7.49美元,他将得到0.25美分的加薪!希望有意义如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮({}
),以很好地格式化和语法突出显示它!被另一个编辑删除了。OP最初发布的代码在exec
之前有一个drop proc
(这毫无意义),我想这会导致错误,而不是递归调用