sql server 2008 r2的四舍五入

sql server 2008 r2的四舍五入,sql,stored-procedures,Sql,Stored Procedures,对于11号员工的工资总额,比洛的四舍五入值是10.44,但对于某些人来说,比洛的四舍五入值是10,即使他们都设置为小数(8,2) 存储过程只能返回整数值: 发件人: 存储过程可以向调用过程或应用程序返回整数值 您需要的是一个输出参数: ALTER procedure [dbo].[hms_GetEmployeeSalaryByEmpNo] ( @Id int, @totalsalary decimal(8,2) OUTPUT ) ... SET @totalsalary = (

对于11号员工的工资总额,比洛的四舍五入值是10.44,但对于某些人来说,比洛的四舍五入值是10,即使他们都设置为小数(8,2)


存储过程只能返回整数值:

发件人:

存储过程可以向调用过程或应用程序返回整数值

您需要的是一个输出参数:

ALTER procedure [dbo].[hms_GetEmployeeSalaryByEmpNo]
(
   @Id int,
   @totalsalary decimal(8,2) OUTPUT
)
...
SET @totalsalary =
(
    SELECT SUM(salary)
    FROM #contracts c,salary s
    WHERE s.contract_id = c.contract_id
)

--return @totalsalary  -- not necessary anymore
或标量值函数:

CREATE FUNCTION [dbo].[hms_GetEmployeeSalaryByEmpNo]
(
    @Id int
)
RETURNS DECIMAL(8,2)
AS
....
SET @totalsalary =
(
    SELECT SUM(salary)
    FROM #contracts c,salary s
    WHERE s.contract_id = c.contract_id
)

RETURN @totalsalary

*还请注意,我在示例中更正了“salary”的拼写。

您在输出参数上获得了一个额外的
@
,但我还是+1e。@Damien_不相信这是一个有效(尽管非常规)标识符。@MartinSmith-true,但他们需要在参数列表和
SET
语句中都这样做。目前,这是不一致的。另外,:“某些Transact-SQL函数的名称以双at符号(@)开头。为了避免与这些函数混淆,您不应该使用以@@开头的名称。”@Damien_The_unsiver Thank-修复。@DStanley但这意味着我无法再进行临时表检查是吗?我需要的是,雇主对此很严格
CREATE FUNCTION [dbo].[hms_GetEmployeeSalaryByEmpNo]
(
    @Id int
)
RETURNS DECIMAL(8,2)
AS
....
SET @totalsalary =
(
    SELECT SUM(salary)
    FROM #contracts c,salary s
    WHERE s.contract_id = c.contract_id
)

RETURN @totalsalary