Ich erlaube dem Endbenutzer zu definieren, wie viele Zeilen von einer Abfrage zurückgegeben werden (SELECT TOP (@x)). Gibt es einen Wert, der eingegeben werden kann, bei dem alle Zeilen zurückgegeben werden? Oder muss ich die Abfrage dynamisch ohne TOP (@x) erstellen, wenn alle Zeilen zurückgegeben werden sollen?
Ich verwende SQL Server 2012.
sql-server
Wayne E. Pfeffer
quelle
quelle
TOP ... ORDER BY
etwas Wird dasORDER BY
noch benötigt, wenn Sie alle auswählen?TOP
kommt nicht in Frage? Als hätten Sie es mit einer vordefinierten Abfrage zu tun und müssen sie etwas übergeben ?Antworten:
Nun, es sieht so aus, als wäre TOP ein BIGINT, wenn Sie kein PERCENT verwenden . Das heißt, Sie könnten den Maximalwert von BIGINT übergeben ,
Ich bezweifle ernsthaft, dass Sie jemals einen so großen Tisch sehen werden. Ich bin nicht sicher, welche Auswirkungen dies auf den Abfrageplan haben würde.
quelle
@x
ist ein BIGINT, dannSET @x = 0x7fffffffffffffff
könnte dies für einige klarer sein. Es ist sowieso einfacher, sich zu erinnern.7
und der Rest davon istF
und Sie insgesamt 16 Zeichen für die 8 Bytes benötigen. Und ja, es wird implizit konvertiert, wenn es einer Variablen dieses Datentyps zugewiesen wird.0x7fffffffffffffff
Darstellung des Maximalwerts vonbigint
in SqlServer verwirrt war. Der Grund ist, dass Sie in der binären Konstantenschreibweise von SqlServer7f
das niedrigste Byte haben, während Sie in Sprachen wie c ++ das höchste Byte haben, um das Maximum des vorzeichenbehafteten Integraltyps zu erhalten.Das könnte man auch überlegen
Anstatt von
Der Wert, auf den Sie @x setzen müssten, ist
0
das Deaktivieren.Dies gilt nicht mehr für Datenänderungsanweisungen, aber nicht mehr für
SELECT
.2012 wird ein anderer Plan für den Fall erstellt, dass
ROWCOUNT
0 gegen einen Wert ungleich Null ist.Wenn das
ORDER BY Baz
nur dazu da ist, dem eine Bedeutung zu geben,TOP
anstatt eine Präsentationsreihenfolge für die Ergebnisse bereitzustellen, und Sie keinen Index haben, der dies unterstützt, dann würde eine Aufteilung in zwei Abfragen in diesem0
Fall eine unnötige Sortierung vermeiden .quelle
Mit SELECT TOP 100 PERCENT können Fehler umgangen werden, wenn "TOP" in einer Abfrage verwendet wird.
quelle
quelle
@x
) und fragt nun, an welchen Wert übergeben werden soll,@x
damit "alle Zeilen" angezeigt werden, unabhängig davon, wie viele Zeilen die Tabelle tatsächlich enthält. Vielleicht könnten Sie herausfinden, wie Sie Ihre Lösung an die Anforderungen des OP anpassen können.(SELECT COUNT(*) FROM YourTable)
ist kein Wert.