为什么在以下SQL中得到“关键字'IF'附近的语法不正确”?:

use AdventureWorks
CREATE FUNCTION Query2_Function(@DPT INT)
RETURNS TABLE
AS
RETURN
IF @DPT is not null
select edh.departmentid,d.name,count(*)as cnt
    From HumanResources.Employee e
    inner join HumanResources.EmployeeDepartmentHistory edh on e.employeeID = edh.employeeid
    inner join humanresources.department d on edh.departmentid = d.departmentid
    where d.Name = @dpt
    group by edh.departmentid, d.name

最佳答案

内联表值函数中不能有任何控制语句流。如果@dpt is null查询将仍然返回空结果集

编辑:或至少将,如果正确的数据类型。您有@DPT INT,并且正在与name列进行比较。这似乎注定要在执行时失败。

编辑2:

作为解决方案,您可以1)只需放下IF @DPT is not null行,然后2)要么


如果功能应按名称搜索部门,则将@DPT参数的类型从INT更改为varchar(100)


要么


WHERE子句更改为以下内容:

where d.departmentid = @dpt


如果您要按部门ID搜索。

10-06 13:28