Wie ermittelt SQL Server die Reihenfolge der Datensätze in der Ergebnismenge der Abfrageausführung?
Ich versuche, Kopf oder Zahl daraus zu machen, aber ich kratzte mir am Kopf. Wenn ich die Felder ändere, wähle ich die Reihenfolge aus, die sich ebenfalls ändert. Wenn ich die folgende SQL mit a ausführe, SELECT *
erhalte ich dieselben Datensätze, jedoch in einer ganz anderen Reihenfolge.
SELECT TOP (900)
AD.ATTACHMENTID,
AD.NAME,
AD.ISINLINE,
AD.INSERTEDDATETIME,
ATMT.ATTACHMENTBLOB,
U.UFID
FROM ATTACHMENTDETAIL AD WITH (NOLOCK)
INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID
INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID
INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID
INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID
INNER JOIN [USER] U ON U.ID = MD.USERID
LEFT OUTER JOIN XmlExtractionMapping XM ON MA.MESSAGEID = XM.MessageId
WHERE AD.FILEBOXTOKEN IS NULL
AND (XM.XMLEXTRACTIONDATE IS NOT NULL OR
(MSG.MESSAGESOURCEID = 1 AND MD.FolderId <> -4))
AND AD.ISINLINE = 'FALSE'
ORDER BY
Klausel macht SQL Server (und jedes andere RDBMS), wie es sich anfühlt .
NOLOCK
Sie im ersten Fall im Internet nach - Sie werden alle möglichen Gründe sehen, warum Sie es nicht verwenden sollten. Für letzteres siehe sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/…