我在存储过程中遇到错误。我搜索并尝试了不同的东西,任何解决方案都没有解决它。
我想检查一下员工的薪水是否介于两个不同的值之间,并且他们不会超过最小值或最大值。
我使用触发器在插入和更新时触发并获取以下数据并使用该数据执行存储过程。
1 - job_id (INT datatype)
1000.00 - salaris (MONEY datatype)
13 - employee_id (INT datatype)
3000.00 - min_salary (MONEY datatype)
7000.00 - max_salary (MONEY datatype)
调用存储过程:
EXEC SP_Salary_Check salary, emp_id, job_number, min_salary, max_salary, '' (output)
存储过程的参数:
(@NEW_SALARY money , @EMP_ID integer, @JOB_NUMBER integer, @MIN_SALARY money, @MAX_SALARY money, @MSG varchar(50) OUTPUT)
如果我插入一个员工,它将破坏存储过程的参数。我将收到此错误:将数据类型nvarchar
转换为货币时出错。其中表示属性@NEW_SALARY.
如果我将所有内容更改为nvarchar
,则效果非常好。如果我只将数据类型转换为nvarchar
,我将收到相同的错误,但是使用整数而不是金钱。
有没有人对此有所了解?
插入声明:
USE [Outdoor_Paradise]
GO
INSERT INTO [dbo].[employee]
([ss_number]
,[salary]
,[start_date]
,[termination_date]
,[first_name]
,[last_name]
,[work_phone]
,[extension]
,[fax]
,[email]
,[sales_branch_code]
,[job_number]
,[manager_id]
,[dept_id]
,[emp_details_id])
VALUES
(12345
,1500
,'2000-12-12'
,NULL
,'Foo'
,'Bar'
,'12345'
,'1000'
,'fax?'
,'foo@bar.nl'
,1
,1
,NULL
,NULL
,1)
GO