向表SQL Server添加函数时出现多部分标识符错误

问题描述 投票:0回答:2

当前我具有以下功能

CREATE FUNCTION dbo.CurrentEmpCount()
RETURNS DECIMAL
AS
BEGIN
    DECLARE @RetCount DECIMAL, @Return DECIMAL;

    SELECT @RetCount = COUNT(*)
    FROM Employee
    GROUP BY DepartmentID

    SET @Return = @RetCount

    RETURN  @Return
END

[当我尝试通过alter将其添加到部门表时,出现错误:

多部分标识符“ dbo.CurrentEmpCount”无法绑定。

ALTER TABLE Department
    ADD WorkStations AS dbo.CurrentEmpCount
GO

有人可以建议任何尝试的方法吗?在我看到的示例中,他们的操作与此类似。

sql sql-server
2个回答
0
投票

您的功能应具有DepartmentID的输入。然后计算该DepartmentID

的员工人数
CREATE FUNCTION dbo.CurrentEmpCount
(
    @DepartmentID  INT        -- assuming that ID is INT
)
RETURNS INT                   -- count() returns an INTEGER not DECIMAL
AS
BEGIN
    DECLARE @RetCount INT

    SELECT  @RetCount = COUNT(*)
    FROM    Employee
    WHERE   DepartmentID = @DepartmentID

    RETURN  @RetCount 
END

然后您的部门表应该如下

ALTER TABLE Department
    ADD WorkStations AS dbo.CurrentEmpCount(DepartmentID)

您需要传递表DepartmentIDDepartment

或者,您可以只为VIEW表创建一个Department

注意:如果要存储带小数位的数字,请使用DECIMALNUMERIC。从Doc Numeric data types that have fixed precision and scale


0
投票

您不能直接将函数值添加为表中的列。

您的实际要求是什么

[如果您要明智地使用部门,则员工在部门表中计数。那么您必须使用以下查询进行计算

更新BSET B.dept_no_employee = A.no_count从部门B外层申请(SELECT COUNT(A.id)AS no_count来自员工A在哪里A.dept_id = B.dept_id)A

enter image description here否则忽略答案。

© www.soinside.com 2019 - 2024. All rights reserved.