V SQL Server můžete použít SET ROWCOUNT k omezení řádků vrácených dotazem.
Funguje to tak, že SQL Server přestane zpracovávat dotaz poté, co se vrátí zadaný počet řádků.
Je to podobné jako TOP() klauzule, ale s tím rozdílem, že SET ROWCOUNT je nastaven mimo dotaz a ovlivní všechny následující dotazy.
Příklad
Zde je příklad k demonstraci.
Nejprve proveďte dotaz bez nastavení ROWCOUNT .
SELECT * FROM Dogs; Výsledek:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Takže jsou vráceny čtyři řádky bez nastavení ROWCOUNT .
Nyní použijeme SET ROWCOUNT chcete-li omezit počet řádků, spusťte dotaz znovu.
SET ROWCOUNT 2;
SELECT * FROM Dogs; Výsledek:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Následné dotazy
Jak již bylo zmíněno, SET ROWCOUNT ovlivní všechny následující dotazy.
Pokud spustím následující dotaz bezprostředně po předchozím, vrátí se také dva řádky.
SELECT * FROM Cats; Výsledek:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
A to navzdory skutečnosti, že by byly vráceny tři řádky, kdybych nepoužil SET ROWCOUNT omezit vracené řádky.
Mohu to ověřit pomocí COUNT() doložka.
SELECT COUNT(*) FROM Cats; Výsledek:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
Resetovat ROWCOUNT
ROWCOUNT můžete resetovat hodnotu tím, že mu přiřadíte hodnotu 0 (nula).
To znamená, že výsledky dotazů již nebudou omezeny. Dotaz bude pokračovat ve zpracování až do konce.
SET ROWCOUNT 0;
SELECT * FROM Cats; Výsledek:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT vs. TOP()
Pokud použijete TOP() klauzuli v dotazu, když jste již nastavili ROWCOUNT , váš ROWCOUNT nastavení přepíše pouze TOP() pokud ROWCOUNT je menší hodnota.
Zde je příklad ROWCOUNT je větší hodnota.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs; Výsledek:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
V tomto případě TOP() klauzule zvítězila.
A zde je příklad ROWCOUNT je menší hodnota.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs; Výsledek:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Kompatibilita
Společnost Microsoft doporučuje SET ROWCOUNT neovlivní DELETE , INSERT a UPDATE příkazy v budoucí verzi SQL Server. Společnost Microsoft doporučuje, abyste se takovému použití v nových vývojových pracích vyhnuli a plánovali upravit aplikace, které jej aktuálně používají.
Společnost Microsoft doporučuje používat TOP() klauzule, pokud potřebujete omezit řádky ovlivněné v DELETE , INSERT a UPDATE prohlášení.
Pozor
ROWCOUNT volba funguje na většině příkazů T-SQL, včetně spouštěčů. Neovlivní však dynamické kurzory, ale omezí sadu řádků sady klíčů a necitlivé kurzory. Tuto možnost byste proto měli používat opatrně.