Pozwalam użytkownikowi końcowemu zdefiniować, ile wierszy jest zwracanych przez zapytanie (SELECT TOP (@x)). Czy istnieje wartość, którą można wprowadzić w miejscu, w którym zwracane są wszystkie wiersze? Czy też muszę dynamicznie tworzyć zapytanie bez TOP (@x), jeśli chcą zwrócić wszystkie wiersze?
Używam SQL Server 2012.
sql-server
Wayne E. Pfeffer
źródło
źródło
TOP ... ORDER BY
coś CzyORDER BY
coś jest nadal wymagane w przypadku, gdy wybierzesz wszystko?TOP
to nie wchodzi w rachubę? Czy masz jakieś predefiniowane zapytanie i musisz coś przekazać ?Odpowiedzi:
Cóż, wygląda na to, że TOP jest WIELKIM, jeśli nie używasz PROCENTU . Oznacza to, że możesz podać maksymalną wartość BIGINT ,
Poważnie wątpię, czy kiedykolwiek zobaczysz tak duży stół. Nie jestem jednak pewien, jaki wpływ miałby to na plan zapytań.
źródło
@x
jest WIELKA,SET @x = 0x7fffffffffffffff
może być dla niektórych bardziej zrozumiała. W każdym razie łatwiej to zapamiętać.7
a następnie reszta toF
i potrzebujesz łącznie 16 znaków na 8 bajtów. I tak, zostanie domyślnie przekonwertowany, jeśli zostanie przypisany do zmiennej tego typu danych.0x7fffffffffffffff
reprezentacją maksymalnej wartości parametrubigint
SqlServer. Powodem jest to, że w notacji binarnej SQLSERVER stałej masz7f
w najniższej bajt, gdzie podobnie jak w językach takich jak C ++ masz go w najwyższym bajt dostać max podpisanej integralną typu.Możesz również rozważyć
Zamiast
Wartość, którą musisz ustawić @x, to
0
wyłączenie.Jest to przestarzałe w przypadku instrukcji modyfikacji danych, ale nie jest przestarzałe
SELECT
.W 2012 r. Opracowywany jest inny plan dla przypadku, który
ROWCOUNT
wynosi 0 w porównaniu z pewną wartością niezerową.Jeśli
ORDER BY Baz
jest to tylko po to, aby nadać znaczenie,TOP
a nie podać kolejność prezentacji wyników, a nie masz takiego indeksu, podział na dwa zapytania pozwoliłby uniknąć niepotrzebnego sortowania w tym0
przypadku.źródło
WYBIERZ TOP 100 PROCENT może być użyty do ominięcia błędów przy użyciu „TOP” w zapytaniu.
źródło
źródło
@x
) i teraz pytają, jaką wartość przekazać, aby@x
oznaczało to „wszystkie wiersze” bez względu na to, ile wierszy faktycznie ma tabela. Może uda ci się dowiedzieć, jak dostosować swoje rozwiązanie do wymagań PO.(SELECT COUNT(*) FROM YourTable)
nie jest wartością.