it-swarm.com.de

SQL Server - Ein Ausdruck eines nicht-booleschen Typs, der in einem Kontext angegeben wird, in dem eine Bedingung in der Nähe von 'RETURN' erwartet wird.

Abrufen dieses Fehlers mit der folgenden Abfrage in SQL Server 2012.

Ein Ausdruck eines nicht-booleschen Typs, der in einem Kontext angegeben wird, in dem eine Bedingung erwartet wird, in der Nähe von '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
12
Sohail xIN3N

Das ist eine ungültige Syntax. Sie mischen relationale Ausdrücke mit skalaren Operatoren (OR). Insbesondere können Sie expr IN (select ...) OR (select ...) nicht kombinieren. Sie möchten wahrscheinlich expr IN (select ...) OR expr IN (select ...). Die Verwendung von union würde auch funktionieren: expr IN (select... UNION select...)

9
Remus Rusanu

Ein Ausdruck eines nicht-booleschen Typs, der in einem Kontext angegeben wird, in dem eine Bedingung erwartet wird

Ich habe diesen Fehler auch erhalten, als ich vergessen habe, bei der Angabe meiner Join-Klausel eine ON-Bedingung hinzuzufügen.

8
Lori Kent

Ihr Problem könnte hier sein:

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

versuche zu wechseln

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
                        )
3
Rahul Garg

Sie können es auch so umschreiben

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

        )

Außerdem wird in Ihrer RETURN-Anweisung eine Rückgabetabelle erwartet

2
Jade