sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje SET ROWCOUNT v SQL Server

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ě.


  1. Jak používat vlastnost IDENTITY() v SQL Server

  2. Jak rychle upravit hodnoty v tabulce v SQL Server Management Studio?

  3. Storage Engine Volba:Aria

  4. Jak automaticky aktualizuji časové razítko v PostgreSQL