我在SQL中创建了这个过程,但它不会执行,我做错了什么?

时间:2016-04-13 19:38:24

标签: sql sql-server

代码:

Create Procedure sp_EmpBonus (@BonusAmt int)
AS
    Select 
        FirstName, LastName, Title, 
        Salary, 
        Salary * Cast('xxx' as int) TotalBonus
    From 
        Employee    
    Where 
        Cast('xxx'as int) = @BonusAmt

EXEC sp_EmpBonus '.10'

错误:

  

Msg 8114,Level 16,State 5,Procedure sp_EmpBonus,Line 0
  将数据类型varchar转换为int时出错。

3 个答案:

答案 0 :(得分:0)

您声明了一个整数参数,但'.10'(十分之一)不是整数,也不能从VARCHAR强制转换为它。

答案 1 :(得分:0)

更改此行

EXEC sp_EmpBonus 10

当您在'somevalue'(单引号)中写一些内容时,这意味着它不是int

答案 2 :(得分:0)

这里有几件事:

  • 正如在其他帖子中提到的那样,你用字符串与int调用你的sp。
  • 接下来您的CAST功能看起来不正确(请参阅下面的示例)。
  • 最后,您使用浮点值调用过程,但似乎您希望处理被视为int的所有内容。

样品:

 Number   Date          ID      Total   Status  Paid  
['E5345', '22/09/2015', 'C106', '815', 'A', '400']
['E5348', '23/09/2015', 'C109', '370', 'A', '200']
['E5349', '25/09/2015', 'C110', '480', 'A', '250']
['E5353', '28/09/2015', 'C114', '272', 'A', '200']
['E5355', '29/09/2015', 'C116', '530', 'A', '450']
['E5363', '01/10/2015', 'C124', '930', 'A', '500']
['E5364', '02/10/2015', 'C125', '915', 'A', '800']
['E5367', '03/10/2015', 'C128', '427', 'A', '350']
['E5373', '10/10/2015', 'C134', '1023', 'A', '550']