46 Stimmen

Reihenfolge der Ausführung der SQL-Abfrage

Ich bin verwirrt mit der Reihenfolge der Ausführung dieser Abfrage, bitte erklären Sie mir das. Ich bin verwirrt, wenn die Verknüpfung angewendet wird, die Funktion aufgerufen wird, eine neue Spalte mit dem Fall hinzugefügt wird und wenn die Seriennummer hinzugefügt wird. Bitte erklären Sie mir die Reihenfolge der Ausführung all dessen.

select Row_number() OVER(ORDER BY (SELECT 1))  AS 'Serial Number', 
    EP.FirstName,Ep.LastName,[dbo].[GetBookingRoleName](ES.UserId,EP.BookingRole) as RoleName,  
    (select top 1 convert(varchar(10),eventDate,103)from [3rdi_EventDates] where EventId=13) as EventDate,
    (CASE [dbo].[GetBookingRoleName](ES.UserId,EP.BookingRole)  
            WHEN    '90 Day Client' THEN 'DC'
            WHEN    'Association Client'  THEN  'DC'
            WHEN    'Autism Whisperer'    THEN  'DC'
            WHEN    'CampII'             THEN   'AD' 
            WHEN    'Captain'              THEN 'AD' 
            WHEN    'Chiropractic Assistant' THEN 'AD'
            WHEN    'Coaches'               THEN 'AD'
            END) as Category from [3rdi_EventParticipants] as EP  
    inner join [3rdi_EventSignup] as ES on EP.SignUpId = ES.SignUpId  
    where EP.EventId = 13
    and userid in (  
    select distinct userid from userroles  
    --where roleid not in(6,7,61,64) and roleid not in(1,2))  
    where roleid not in(19, 20, 21, 22) and roleid not in(1,2))

Dies ist die Funktion, die in der obigen Abfrage aufgerufen wird.

CREATE function [dbo].[GetBookingRoleName]  
(  
 @UserId as integer,
 @BookingId as integer
)  
RETURNS varchar(20)  
as  
begin  
declare @RoleName varchar(20)  

if @BookingId = -1
Select Top 1 @RoleName=R.RoleName From UserRoles UR inner join Roles R on UR.RoleId=R.RoleId Where UR.UserId=@UserId and R.RoleId not in(1,2)  
else
Select @RoleName= RoleName From Roles where RoleId = @BookingId

return @RoleName  
end

2voto

rsjaffe Punkte 5270

Hay un logisch Die Reihenfolge der Auswertung des Abfragetextes ist nicht festgelegt, aber die Datenbankmaschine kann die Reihenfolge der Ausführung der Abfragekomponenten auf der Grundlage der optimalen Reihenfolge wählen. Die logische Reihenfolge der Textanalyse ist unten aufgeführt. Das ist zum Beispiel der Grund, warum Sie keinen Alias von SELECT Klausel in einer WHERE Klausel. Was den Parsing-Prozess der Abfrage anbelangt, so existiert der Alias noch nicht.

  1. VON

  2. ON

  3. OUTER

  4. WHERE

  5. GROUP BY

  6. CUBE | ROLLUP

  7. HABEN

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

Ver die Microsoft-Dokumentation (siehe "Logical Processing Order of the SELECT statement") für weitere Informationen zu diesem Thema.

0voto

Pepik z Usti Punkte 31

Vereinfachte Reihenfolge für T-SQL -> SELECT-Anweisung:

1) FROM 
2) Cartesian product
3) ON
4) Outer rows
5) WHERE
6) GROUP BY
7) HAVING
8) SELECT
9) Evaluation phase in SELECT 
10) DISTINCT
11) ORDER BY
12) TOP 

wie ich es bisher getan hatte - dieselbe Reihenfolge galt auch für SQLite.

Quelle => SELECT (Transact-SQL)

... natürlich gibt es (seltene) Ausnahmen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X