Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server存储过程错误(员工加薪)_Sql Server_Sql Server 2008_Stored Procedures_Sql Server 2012 - Fatal编程技术网

Sql server SQL Server存储过程错误(员工加薪)

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

我正在尝试执行一个存储过程,在该过程中,我给员工加薪,但我似乎不明白我做错了什么,它给了我以下错误

Msg 8115,第16级,第8状态,程序ClerkPayRise,第8行
将数值转换为数据类型数值时出现算术溢出错误

我的存储过程的代码是:

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);

我将非常感谢您的指导和帮助

您犯了以下错误

  • 创建桌面办事员( clerkID varchar(20)不为空, 书记官姓名varchar(20), 职员姓名varchar(20), 职员工资率十进制(3,2), 主键(clerkID), ); 在这个查询中,在“主键(clerkID)”之后不应该有任何逗号“,”

  • 在一行中指定五个值,但表中只有四列 在职员值中插入('clerk01'、'Mgr1'、'Alex'、'Richards',7.49); 这个问题是错误的。它是分配五个值而不是四个值


    如果存储过程中存在任何问题,请进行更正,以便我可以帮助您。

    您缺少存储过程正文和存储过程执行语句之后的
    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
    (这毫无意义),我想这会导致错误,而不是递归调用