SQL Server—在预期条件的上下文中指定的非布尔型表达式,接近';返回';

SQL Server—在预期条件的上下文中指定的非布尔型表达式,接近';返回';,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,在SQL Server 2012中通过以下查询获取此错误 在“RETURN”附近预期条件的上下文中指定的非布尔型表达式。 CREATE FUNCTION [dbo].[GetPMResources](@UserResourceNo nvarchar(250)) RETURNS @Resources TABLE ( ResourceNo nvarchar(250) COLLATE Latin1_General_CS_AS not null, Name nvarchar(250)

在SQL Server 2012中通过以下查询获取此错误

在“RETURN”附近预期条件的上下文中指定的非布尔型表达式。

CREATE FUNCTION [dbo].[GetPMResources](@UserResourceNo nvarchar(250))

   RETURNS @Resources TABLE (
   ResourceNo nvarchar(250) COLLATE Latin1_General_CS_AS not null,
   Name nvarchar(250) COLLATE Latin1_General_CS_AS not null
   ) 
  AS
  BEGIN

        Declare @RoleID int, @UserDivision nvarchar(20)
        SELECT TOP(1) @RoleID = r.ReportingRole, @UserDivision = r.DivisionCode
        FROM Resource r 
        WHERE r.ResourceNo = @UserResourceNo



        INSERT @Resources
        SELECT r.ResourceNo,Name = r.ResourceNo + ' ' + r.Name
        FROM Resource r WHERE r.ResourceNo IN
                        ( 
                            SELECT m.ResourceNo FROM JobMember m
                            JOIN Job j ON j.JobNo = m.JobNo
                            WHERE j.ProjectManagerNo = @UserResourceNo 
                            OR
                            j.AlternateProjectManagerNo = @UserResourceNo
                        ) 
                        OR
                        (
                            SELECT m.ResourceNo FROM JobMember m
                            JOIN JobTask t ON t.JobTaskNo = m.JobTaskNo
                            WHERE t.TaskManagerNo = @UserResourceNo
                            OR
                            t.AlternateTaskManagerNo = @UserResourceNo
                        )                   
        RETURN 
  END

这是无效的语法。您正在将关系表达式与标量运算符(
)混合使用。具体来说,您不能在(选择…)或(选择…)中组合
expr。您可能需要
expr IN(选择…)或expr IN(选择…)
。使用union也可以工作:
expr IN(选择…union select…

您的问题可能在这里:

OR
                        (
                            SELECT m.ResourceNo FROM JobMember m
                            JOIN JobTask t ON t.JobTaskNo = m.JobTaskNo
                            WHERE t.TaskManagerNo = @UserResourceNo
                            OR
                            t.AlternateTaskManagerNo = @UserResourceNo
                        )
试着换成

OR r.ResourceNo IN
                        (
                            SELECT m.ResourceNo FROM JobMember m
                            JOIN JobTask t ON t.JobTaskNo = m.JobTaskNo
                            WHERE t.TaskManagerNo = @UserResourceNo
                            OR
                            t.AlternateTaskManagerNo = @UserResourceNo
                        )

你也可以这样重写它

FROM Resource r WHERE r.ResourceNo IN
        ( 
            SELECT m.ResourceNo FROM JobMember m
            JOIN Job j ON j.JobNo = m.JobNo
            WHERE j.ProjectManagerNo = @UserResourceNo 
            OR
            j.AlternateProjectManagerNo = @UserResourceNo

            Union All

            SELECT m.ResourceNo FROM JobMember m
            JOIN JobTask t ON t.JobTaskNo = m.JobTaskNo
            WHERE t.TaskManagerNo = @UserResourceNo
            OR
            t.AlternateTaskManagerNo = @UserResourceNo

        )
在return语句中也需要返回表,return语句是在需要条件的上下文中指定的非布尔型表达式


当我在指定join子句时忘记添加条件时,我也遇到了这个错误

谢谢你纠正我,现在我意识到我犯了什么错误。谢谢你的回复。谢谢你的回复和建议。我刚刚收到它,因为我有两次WHERE子句。。。嗯,这也是我的错。。。