U góry (Transact-SQL)

Określa, że tylko pierwszego zestaw wierszy będą zwracane z wyniku kwerendy.zestaw wierszy może być liczbą lub procent wierszy.GÓRNY wyrażenie mogą być używane w instrukcji SELECT, INSERT, UPDATE, korespondencji seryjnej i DELETE.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

[ 
     TOP (expression) [PERCENT]
     [ WITH TIES ]
]

Argumenty

  • expression
    Jest liczbowe wyrażenie określa liczbę wierszy zwracanych.expressionsą niejawnie konwertowane na float wartości, jeśli określono wartość PROCENTOWĄ; w przeciwnym razie jest konwertowany na bigint.

    Nawiasy, który rozgranicza expression w górę jest wymagany w instrukcji INSERT, UPDATE, scalanie i Usuń.W celu zapewnienia zgodności z poprzednimi wersjami PIERWSZYCH expression bez nawiasów w wybierz instrukcje jest obsługiwane, ale firma Microsoft nie zaleca tego.

    Jeśli kwerenda zawiera ORDER BY klauzula, pierwszy expression wierszy, lub expression procent wierszy według kolejności według klauzula są zwracane.Jeśli kwerenda ma nie ORDER BY klauzula, porządek wierszy jest dowolnego.

  • PROCENT
    Wskazuje, czy kwerenda zwraca tylko pierwszą expression procent wierszy z zestaw wyników.

  • WITH TIES
    Określa zwrócone dodatkowe wiersze z podstawowego zestaw wyników o tej samej wartości w kolumnach ORDER BY pojawiające się ostatnio góry n (procent) wierszy.U GÓRY...WITH TIES może być określony tylko w instrukcji SELECT i tylko wtedy, gdy określono ORDER BY klauzula .

    Ostrzeżenie

    Kolejność zwrócony wiążącego rekordów jest dowolnego.ORDER BYnie dotyczy ta reguła.

Uwagi

U góry nie można używać razem z instrukcje UPDATE i DELETE w widokach podzielonym na partycje.

Wiersze w GÓRNEJ wyrażenie używane INSERT, UPDATE, korespondencji seryjnej lub Usuń nie są rozmieszczone w dowolnej kolejności.GÓRY n zwraca n losowe wierszy.Na przykład, następujący INSERT instrukcja zawiera ORDER BY klauzulai jeszcze niniejszej klauzula nie wpływa na wiersze bezpośrednio odwołują się INSERT instrukcja.

INSERT TOP (2) INTO Table2 (ColumnB) 
    SELECT ColumnA FROM Table1 
    ORDER BY ColumnA;

ORDER BYw poprzedniej kwerendyklauzula odwołuje się tylko wiersze, które są zwracane przez zagnieżdżony SELECTinstrukcja. INSERTinstrukcja wybiera wszystkie dwóch wierszy zwracanych przez SELECTinstrukcja. Aby upewnić się, że u góry dwa wiersze z SELECT podzapytanie są wstawiane, nowa napisać kwerendę w następujący sposób.

INSERT INTO Table2 (ColumnB) 
    SELECT TOP (2) ColumnA FROM Table1 
    ORDER BY ColumnA;

SQL ServerUmożliwia aktualizowanie widoków, które zostały utworzone za pomocą klauzulaTOP.Ponieważ klauzula TOP jest uwzględniony w definicji widoku, niektóre wiersze może zniknąć z widoku z powodu aktualizacji, jeśli wynik nie spełnia już wymagań GÓRNY wyrażenie.Aby uzyskać więcej informacji, zobacz Modyfikowanie danych przy użyciu widoku.

GÓRNY wyrażenie w kwerendzie nie wpływa na instrukcje, które mogą być wykonywane z powodu wyzwalacza uruchamiany.Tabele wstawione i zaktualizowane w wyzwalacze będą wyświetlane tylko wiersze, których dotyczy prawdziwie instrukcji INSERT, UPDATE, korespondencji seryjnej lub DELETE.

Korzystanie z góry w instrukcji korespondencji seryjnej

Kiedy określony w korespondencji seryjnej instrukcja, klauzula TOP jest stosowana po całej źródło tabela i całej miejsce docelowe tabela są sprzężone i sprzężonych wiersze, które nie kwalifikują się do wstawiania, aktualizacji lub usuwania akcja są usuwane.TOP klauzula dalsze zmniejsza liczbę wierszy sprzężonych określona wartość i insert, update lub delete akcje są stosowane do pozostałych wierszy połączonych w sposób nieuporządkowane.Oznacza to, że jest nie zamówienia, w którym wiersze są rozdzielone między akcje zdefiniowane w klauzulach podczas.Na przykład określenie z góry (10) wpływa na wiersze 10; te wiersze 7 mogą być aktualizowane i 3 wstawiony lub 1 mogą zostać usunięte, 5 zaktualizowane i 4 dodaje się i tak dalej.

Ponieważ korespondencji seryjnej instrukcja wykonuje skanowanie pełne tabela tabeli źródło i miejsce docelowe , wydajność wejścia/wyjścia mogą mieć wpływ podczas modyfikowania dużej tabela , tworząc wiele instancji za pomocą klauzula TOP.W tym scenariuszu jest ważne, aby zapewnić, że wszystkie kolejne instancje miejsce docelowe nowe wiersze.Aby uzyskać więcej informacji, zobacz Optymalizacja wydajności instrukcji korespondencji seryjnej.

Przykłady

A.U góry przy użyciu zmiennych

W poniższym przykładzie użyto zmiennej uzyskiwania pierwszego 10 pracowników, które są wymienione w dbo.Employee tabela AdventureWorks2008R2 bazy danych.

USE AdventureWorks2008R2;
GO
DECLARE @p AS int;
SELECT @p=10
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO

B.Korzystanie z góry procent oraz WIĘZI

Poniższy przykład pobiera góry 10 procent wszystkich pracowników z najwyższą wynagrodzenia i zwraca je w malejącej kolejności zgodnie z wynagrodzenia oprzeć stopy.Określanie WITH TIES upewnienie się, że pracownicy zawierające wynagrodzenia równa najniższej wynagrodzenia, zwracane są także uwzględniane w zestaw wyników, nawet jeśli w ten sposób przekracza 10 procent pracowników.

USE AdventureWorks2008R2;
GO
SELECT TOP(10) PERCENT WITH TIES
pp.FirstName, pp.LastName, e.JobTitle, e.Gender, r.Rate
FROM Person.Person AS pp 
    INNER JOIN HumanResources.Employee AS e
        ON pp.BusinessEntityID = e.BusinessEntityID
    INNER JOIN HumanResources.EmployeePayHistory AS r
        ON r.BusinessEntityID = e.BusinessEntityID
ORDER BY Rate DESC;