Разное

Ms sql rowcount: @@ROWCOUNT (Transact-SQL) — SQL Server

Содержание

@@ROWCOUNT (Transact-SQL) — SQL Server



  • Чтение занимает 2 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database

Возвращает число строк, затронутых при выполнении последней инструкции.Returns the number of rows affected by the last statement. Если число строк превышает 2 миллиарда, используйте инструкцию ROWCOUNT_BIG.If the number of rows is more than 2 billion, use ROWCOUNT_BIG.

Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions

СинтаксисSyntax

@@ROWCOUNT  

Типы возвращаемых данныхReturn Types

intint

RemarksRemarks

Инструкции Transact-SQLTransact-SQL могут устанавливать значение в @@ROWCOUNT указанными ниже способами.Transact-SQLTransact-SQL statements can set the value in @@ROWCOUNT in the following ways:

  • Установка значения @@ROWCOUNT в число считанных или измененных строк.Set @@ROWCOUNT to the number of rows affected or read. Строки могут быть отосланы или не отосланы клиенту.Rows may or may not be sent to the client.

  • Сохранение значения @@ROWCOUNT из предыдущего выполнения инструкции.Preserve @@ROWCOUNT from the previous statement execution.

  • Сброс значения @@ROWCOUNT в 0 без возврата значения клиенту.Reset @@ROWCOUNT to 0 but do not return the value to the client.

Инструкции, которые выполняют простые присваивания, всегда устанавливают значение @@ROWCOUNT равным 1.Statements that make a simple assignment always set the @@ROWCOUNT value to 1. Строки не отправляются клиенту.No rows are sent to the client. Примерами таких инструкций являются: SET @local_variable, RETURN, READTEXT и инструкции SELECT без запроса, такие как SELECT GETDATE() или SELECT Generic Text.Examples of these statements are: SET @local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT Generic Text.

Инструкции, которые осуществляют присвоение в запросе или используют RETURN, устанавливают значение функции @@ROWCOUNT в число строк, задействованных или считанных запросом, например SELECT @локальная_переменная = c1 FROM t1.Statements that make an assignment in a query or use RETURN in a query set the @@ROWCOUNT value to the number of rows affected or read by the query, for example: SELECT @local_variable = c1 FROM t1.

Инструкции языка обработки данных DML задают значение @@ROWCOUNT равным числу строк, задействованных в запросе, и возвращают это значение клиенту.Data manipulation language (DML) statements set the @@ROWCOUNT value to the number of rows affected by the query and return that value to the client. DML-инструкции могут не отправлять строки клиенту.The DML statements may not send any rows to the client.

Инструкции DECLARE CURSOR и FETCH задают значение @@ROWCOUNT равным 1.DECLARE CURSOR and FETCH set the @@ROWCOUNT value to 1.

Инструкции EXECUTE сохраняют предыдущее значение @@ROWCOUNT.EXECUTE statements preserve the previous @@ROWCOUNT.

Такие инструкции, как USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, PRINT, RAISERROR, BEGIN TRANSACTION или COMMIT TRANSACTION, сбрасывают значение ROWCOUNT в 0. Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, PRINT, RAISERROR, BEGIN TRANSACTION, or COMMIT TRANSACTION reset the ROWCOUNT value to 0.

Скомпилированные в собственном коде хранимые процедуры сохраняют предыдущее значение @@ROWCOUNT.Natively compiled stored procedures preserve the previous @@ROWCOUNT. Инструкции Transact-SQLTransact-SQL, находящиеся внутри скомпилированных в собственном коде хранимых процедур, не устанавливают значение @@ROWCOUNT.Transact-SQLTransact-SQL statements inside natively compiled stored procedures do not set @@ROWCOUNT. Дополнительные сведения см. в статье Хранимые процедуры, скомпилированные в собственном коде.For more information, see Natively Compiled Stored Procedures.

ПримерыExamples

Следующий пример выполняет инструкцию UPDATE и использует @@ROWCOUNT для определения того, были ли изменены строки.The following example executes an UPDATE statement and uses @@ROWCOUNT to detect if any rows were changed.

USE AdventureWorks2012;  
GO  
UPDATE HumanResources.Employee   
SET JobTitle = N'Executive'  
WHERE NationalIDNumber = 123456789  
IF @@ROWCOUNT = 0  
PRINT 'Warning: No rows were updated';  
GO  

См. также:See Also

Системные функции (Transact-SQL) System Functions (Transact-SQL)
SET ROWCOUNT (Transact-SQL)SET ROWCOUNT (Transact-SQL)



SET ROWCOUNT (Transact-SQL) — SQL Server



  • Чтение занимает 2 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse

Приводит к завершению обработки запроса SQL ServerSQL Server после возвращения указанного количества строк. Causes SQL ServerSQL Server to stop processing the query after the specified number of rows are returned.

Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions

СинтаксисSyntax

SET ROWCOUNT { number | @number_var }   

АргументыArguments

number | @number_varnumber | @number_var
Количество строк, выраженное целым числом, которое необходимо обработать, перед завершением запроса.Is the number, an integer, of rows to be processed before stopping the specific query.

RemarksRemarks

Важно!

Использование инструкции SET ROWCOUNT не будет оказывать влияния на инструкции DELETE, INSERT и UPDATE в последующей версии SQL Server.Using SET ROWCOUNT will not affect DELETE, INSERT, and UPDATE statements in a future release of SQL Server. При программировании избегайте использования инструкции SET ROWCOUNT с инструкциями DELETE, INSERT и UPDATE и постарайтесь внести изменения в приложения, которые используют ее в настоящее время.Avoid using SET ROWCOUNT with DELETE, INSERT, and UPDATE statements in new development work, and plan to modify applications that currently use it. Для аналогичного поведения используйте синтаксис TOP.For a similar behavior, use the TOP syntax. Дополнительные сведения см. в разделе TOP (Transact-SQL).For more information, see TOP (Transact-SQL).

Для выключения этого параметра и возвращения всех строк, укажите SET ROWCOUNT 0.To set this option off so that all rows are returned, specify SET ROWCOUNT 0.

Установка параметра ROWCOUNT приводит к тому, что большинство инструкций языка Transact-SQLTransact-SQL прекращают обработку, если на них влияет указанное число строк.Setting the SET ROWCOUNT option causes most Transact-SQLTransact-SQL statements to stop processing when they have been affected by the specified number of rows. Это включает триггеры.This includes triggers. Параметр ROWCOUNT не влияет на динамические курсоры, но ограничивает набор строк набора ключей и нечувствительных курсоров. The ROWCOUNT option does not affect dynamic cursors, but it does limit the rowset of keyset and insensitive cursors. Пользоваться этим параметром следует осторожно.This option should be used with caution.

Инструкция SET ROWCOUNT переопределяет ключевое слово TOP инструкции SELECT, если параметр ROWCOUNT имеет меньшее значение.SET ROWCOUNT overrides the SELECT statement TOP keyword if the rowcount is the smaller value.

Значение параметра ROWCOUNT устанавливается во время выполнения, а не во время синтаксического анализа.The setting of SET ROWCOUNT is set at execute or run time and not at parse time.

РазрешенияPermissions

Требуется членство в роли public.Requires membership in the public role.

ПримерыExamples

Инструкция SET ROWCOUNT завершает обработку после указанного числа строк.SET ROWCOUNT stops processing after the specified number of rows. В следующем примере обратите внимание на то, что более 500 строк удовлетворяют условию: значение столбца Quantity меньше 300.In the following example, note that over 500 rows meet the criteria of Quantity less than 300. Однако после применения SET ROWCOUNT возвращаются не все строки.However, after applying SET ROWCOUNT, you can see that not all rows were returned.

USE AdventureWorks2012;  
GO  
SELECT count(*) AS Count  
FROM Production.ProductInventory  
WHERE Quantity < 300;  
GO  

Результирующий набор:Here is the result set.

Count 
----------- 
537 

(1 row(s) affected)

Теперь сделайте ROWCOUNT равным 4 и верните все строки, чтобы показать, что возвращается только 4 строки.Now, set ROWCOUNT to 4 and return all rows to demonstrate that only 4 rows are returned.

SET ROWCOUNT 4;  
SELECT *  
FROM Production.ProductInventory  
WHERE Quantity < 300;  
GO  
  
-- (4 row(s) affected)

Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse

Инструкция SET ROWCOUNT завершает обработку после указанного числа строк. SET ROWCOUNT stops processing after the specified number of rows. Обратите внимание, что в следующем примере больше 20 строк удовлетворяют условию AccountType = 'Assets'.In the following example, note that more than 20 rows meet the criteria of AccountType = 'Assets'. Однако после применения SET ROWCOUNT возвращаются не все строки.However, after applying SET ROWCOUNT, you can see that not all rows were returned.

-- Uses AdventureWorks  
  
SET ROWCOUNT 5;  
SELECT * FROM [dbo].[DimAccount]  
WHERE AccountType = 'Assets';  

Чтобы вернуть все строки, установите для параметра ROWCOUNT значение 0.To return all rows, set ROWCOUNT to 0.

-- Uses AdventureWorks  
  
SET ROWCOUNT 0;  
SELECT * FROM [dbo].[DimAccount]  
WHERE AccountType = 'Assets';  

См. такжеSee Also

Инструкции SET (Transact-SQL)SET Statements (Transact-SQL)



Как узнать число затронутых строк инструкцией SQL? Функция @@ROWCOUNT | Info-Comp.ru

Иногда у программиста, который разрабатывает SQL инструкцию или какую-нибудь процедуру, возникает необходимость узнать количество строк, например, которые он обновил инструкцией UPDATE или удалил с помощью инструкции DELETE, Microsoft SQL Server позволяет это сделать с помощью системной функции @@ROWCOUNT. Сегодня мы поговорим об этой функции, а также рассмотрим несколько примеров ее использования.

Функция @@ROWCOUNT в языке T-SQL

@@ROWCOUNT – это системная функция в Microsoft SQL Server, которая возвращает количество затронутых строк при выполнении последней инструкции.

Возвращает значение с типом данных INT. В случае если Вы подразумеваете, что число измененных строк будет больше 2 миллиардов, то лучше использовать аналогичную функцию ROWCOUNT_BIG(), в этом случае тип возвращающего значения будет BIGINT.

Важные моменты при использовании @@ROWCOUNT:

  • Функцию ROWCOUNT необходимо использовать сразу же после выполнения той инструкции, результат которой, в части количества затронутых (измененных) строк, Вы хотите узнать. В случае если этот результат, т.е. число задействованных строк, Вам необходимо использовать дальше по коду, то это число нужно сразу сохранить в переменную;
  • Если ROWCOUNT использовать после инструкции SELECT, то функция будет возвращать число строк, которые возвращает инструкция SELECT;
  • После инструкций INSERT, UPDATE или DELETE функция ROWCOUNT будет возвращать количество задействованных строк в результате соответствующих изменений. Но при этом стоит понимать, что ROWCOUNT будет учитывать и те строки, в которых по факту изменений не произошло, но они были затронуты, например, Вы обновили поле со значением 1 на такое же значение, т.е. на 1;
  • Если @@ROWCOUNT вызвать после инструкции MERGE, то будет возвращаться общее число вставленных, обновленных и удаленных строк;
  • После выполнения инструкций присваивания функция ROWCOUNT будет возвращать значение 1, например, это относится к таким операциям как SET @TestVariable = 1 или SELECT @TestVariable = 1. Также будет возвращаться значение 1 после инструкций DECLARE CURSOR и FETCH;
  • В случаях, если ROWCOUNT используется после инструкций, которые не возвращают, не изменяют и не присваивают не одной строки, функция возвращает значение 0. К таким инструкциям можно отнести USE, IF, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION или COMMIT TRANSACTION.

Примечание! Перед тем как начать, начинающим хотелось бы порекомендовать несколько полезных материалов, которые помогут Вам в освоении языка T-SQL и в понимании всего того, что будет происходить ниже:

Создаем тестовые данные для примеров

Для того чтобы посмотреть, как работает функция @@ROWCOUNT, давайте создадим таблицу. К этой таблице мы и будем обращаться в наших тестовых запросах.

Примечание! Все примеры мы будем рассматривать в СУБД Microsoft SQL Server 2016 Express.

   
   --Инструкция создания таблицы
   CREATE TABLE dbo. TestTable(
         ProductId INT IDENTITY(1,1) NOT NULL,
         ProductName VARCHAR(100) NOT NULL,
         Price MONEY
   ) 
   GO


Примеры использования функции ROWCOUNT

Теперь можно переходить к рассмотрению примеров. Так как в нашей тестовой таблице еще нет данных, давайте добавим в нее строки и посмотрим, что нам вернет @@ROWCOUNT.

Пример 1. Использование ROWCOUNT после инструкции INSERT

Для примера давайте добавим 5 строк, а после сразу вызовем функцию @@ROWCOUNT.

   
   --Инструкция добавления данных
   INSERT INTO dbo.TestTable (ProductName, Price)
           VALUES ('Системный блок', 500),
                   ('Монитор', 350),
                   ('Клавиатура', 100),
                   ('Мышь', 50),
                   ('Принтер', 400)

   --Вызов функции ROWCOUNT
   SELECT @@ROWCOUNT AS [Добавлено строк]               

   --SQL запрос на выборку, 
   --чтобы просто посмотреть фактический результат добавления строк
   SELECT * FROM dbo.TestTable



Как видим, функция вернула нам правильное значение.

Пример 2. Использование ROWCOUNT после инструкции UPDATE

Теперь давайте обновим наши данные инструкцией UPDATE и посмотрим, что нам вернет функция ROWCOUNT. Для примера мы будем обновлять поле Price, но только те строки, у которых значение данного поля больше 200. Также в предыдущем примере мы сразу смотрели на результат того, что нам вернет ROWCOUNT, но иногда требуется сохранить это значение, поэтому давайте в этом примере сохраним число, которое нам вернет ROWCOUNT в переменную.

   
   --Объявление переменной
   DECLARE @CntUpdateRow INT

   --Инструкция обновления данных
   UPDATE dbo.TestTable SET Price = Price + 10
   WHERE Price > 200

   --Вызов функции ROWCOUNT и сохранение значения в переменной
   SET @CntUpdateRow = @@ROWCOUNT 

   --SQL запрос на выборку, 
   --чтобы просто посмотреть фактический результат обновления строк
   SELECT * FROM dbo. TestTable

   --Смотрим что за число у нас сохранено в переменной
   SELECT @CntUpdateRow AS [Затронуто строк]


В данном случае мы можем узнать количество измененных строк именно этой инструкцией UPDATE в любой части инструкции, т.е. не только сразу после непосредственного UPDATE (за счет сохранения значения в переменной).

Заметка! Обзор Azure Data Studio. Что это за инструмент и для чего он нужен.

Пример 3. Использование ROWCOUNT после инструкции SELECT и операций присваивания

Сейчас давайте посмотрим, как работает функция в случаях с выборкой данных, а также после операций присваивания.

   
   --Объявление переменной
   DECLARE @TestVar INT

   --Инструкция присваивания
   SET @TestVar = 100

   --Вызов функции ROWCOUNT
   SELECT @@ROWCOUNT AS [Результат присваивания]

   --SQL запрос на выборку
   SELECT * FROM dbo.TestTable
   WHERE Price < 500

   --Вызов функции ROWCOUNT
   SELECT @@ROWCOUNT AS [Выбрано строк]


Пример 4. Использование ROWCOUNT после инструкции DELETE

В данном примере мы удалим строки из таблицы и в сообщении выведем число удаленных строк.

   
   --Объявление переменной
   DECLARE @CntDeleteRow INT

   --Инструкция удаления всех строк в таблице
   DELETE dbo.TestTable

   --Вызов функции ROWCOUNT и сохранение значения в переменной
   SET @CntDeleteRow = @@ROWCOUNT

   --Пример того, как можно обрабатывать полученный результат
   IF @CntDeleteRow > 0
        SELECT 'Было удалено строк: ' + CAST(@CntDeleteRow AS VARCHAR(10)) AS [Результат]
   ELSE
        SELECT 'Ни одной строки не удалено.' AS [Результат]


Если мы запустим этот SQL запрос второй раз, то у нас уже результат будет другим, так как ни одной строки, в этом случае, мы не удалим.

У меня все, надеюсь, материал был Вам полезен, удачи!

Нравится1Не нравится

Ничего не найдено для Obucheniest 614 Rowcount Function In T Sql %23Primer 1 Ispolzovanie Rowcount Posle Instruktsii


Windows


Всем привет! Сейчас мы с Вами рассмотрим два варианта установки и удаления файлового сервера


Microsoft SQL Server


Начиная с Microsoft SQL Server 2012, стало возможно использовать конструкцию OFFSET-FETCH для реализации постраничной


Microsoft Office


Иногда возникает необходимость загрузить данные именно из текстового файла в базу MSSql 2008, используя


Microsoft SQL Server


Приветствую Вас на сайте Info-Comp.ru! Сегодня я, как и обещал в одном из прошлых


Здесь я хочу представить исходный код программы по автоматическому скачиванию конкретного файла с фтп


Linux


Telegram очень популярная программа и реализована она для многих современных платформ, ее можно использовать

SQL Server.

Используйте TOP вместо SET ROWCOUNT

Перевод статьи — Use TOP instead of SET ROWCOUNT

Оба TOP and SET ROWCOUNT метода ограничения вывода строк имеют право на существование, но они сильно отличаются. TOP ограничивает одну инструкцию T-SQL, в то время как SET ROWCOUNT ограничивает все инструкции в текущем подключении.

Если у вас несколько запросов, в каждом из которых вы хотите вернуть только по 10 строк, то кажется, что лучше использовать SET ROWCOUNT:

SET ROWCOUNT 10

SELECT * FROM HumanResources.Department
SELECT * FROM HumanResources.Employee
SELECT * FROM HumanResources.EmployeeDepartmentHistory
SELECT * FROM HumanResources.EmployeePayHistory
SELECT * FROM HumanResources.JobCandidate
SELECT * FROM HumanResources.Shift

SET ROWCOUNT 0



SET ROWCOUNT 10

SELECT * FROM HumanResources.Department

SELECT * FROM HumanResources.Employee

SELECT * FROM HumanResources.EmployeeDepartmentHistory

SELECT * FROM HumanResources.EmployeePayHistory

SELECT * FROM HumanResources.JobCandidate

SELECT * FROM HumanResources.Shift

SET ROWCOUNT 0

против

SELECT TOP 10 * FROM HumanResources.Department
SELECT TOP 10 * FROM HumanResources.Employee
SELECT TOP 10 * FROM HumanResources.EmployeeDepartmentHistory
SELECT TOP 10 * FROM HumanResources.EmployeePayHistory
SELECT TOP 10 * FROM HumanResources.JobCandidate
SELECT TOP 10 * FROM HumanResources.Shift



SELECT TOP 10 * FROM HumanResources.Department

SELECT TOP 10 * FROM HumanResources.Employee

SELECT TOP 10 * FROM HumanResources.EmployeeDepartmentHistory

SELECT TOP 10 * FROM HumanResources. EmployeePayHistory

SELECT TOP 10 * FROM HumanResources.JobCandidate

SELECT TOP 10 * FROM HumanResources.Shift

Так почему же я рекомендую использовать TOP вместо SET ROWCOUNT? В первую очередь по той причине, что TOP более предсказуемый. SET ROWCOUNT ограничивает ВСЕ запросы, включая триггеры.

Вот пример с триггером на тестовой БД AdventureWorks2008. Я создаю триггер, который удаляет данные из связанных таблиц.

— Create temporary tables to test with to avoid the existing foreign keys
— Create a temp SalesOrderHeader table
SELECT TOP 20 * INTO TempSalesOrderHeader FROM Sales.SalesOrderHeader

— Create a temp SalesOrderDetail table
SELECT * INTO TempSalesOrderDetail
FROM Sales.SalesOrderDetail
WHERE SalesOrderId IN (SELECT SalesOrderId FROM TempSalesOrderHeader)
GO

— Create Trigger
CREATE TRIGGER dbo.tr_dl_SalesOrderDetail
ON TempSalesOrderHeader
AFTER DELETE AS
BEGIN
DELETE FROM TempSalesOrderDetail
FROM TempSalesOrderDetail
JOIN deleted
ON TempSalesOrderDetail.SalesOrderId =
deleted.SalesOrderId
END
GO


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

— Create temporary tables to test with to avoid the existing foreign keys

— Create a temp SalesOrderHeader table

SELECT TOP 20 * INTO TempSalesOrderHeader FROM Sales.SalesOrderHeader

 

— Create a temp SalesOrderDetail table

SELECT * INTO TempSalesOrderDetail

FROM Sales.SalesOrderDetail

WHERE SalesOrderId IN (SELECT SalesOrderId FROM TempSalesOrderHeader)

GO

 

— Create Trigger

CREATE TRIGGER dbo. tr_dl_SalesOrderDetail

ON TempSalesOrderHeader

AFTER DELETE AS

BEGIN

    DELETE FROM TempSalesOrderDetail

    FROM TempSalesOrderDetail

    JOIN deleted

        ON TempSalesOrderDetail.SalesOrderId =

            deleted.SalesOrderId

END

GO

— Run my delete using SET ROWCOUNT
SET ROWCOUNT 10

DELETE FROM TempSalesOrderHeader

SET ROWCOUNT 0
GO



— Run my delete using SET ROWCOUNT

SET ROWCOUNT 10

DELETE FROM TempSalesOrderHeader

SET ROWCOUNT 0

GO

— Show orphaned OrderDetail rows
SELECT *
FROM TempSalesOrderDetail
WHERE SalesOrderId NOT IN (SELECT SalesOrderId FROM TempSalesOrderHeader)
GO



— Show orphaned OrderDetail rows

SELECT *

FROM TempSalesOrderDetail

WHERE SalesOrderId NOT IN (SELECT SalesOrderId FROM TempSalesOrderHeader)

GO

— Cleanup code
DROP TABLE TempSalesOrderHeader
DROP TABLE TempSalesOrderDetail



— Cleanup code

DROP TABLE TempSalesOrderHeader

DROP TABLE TempSalesOrderDetail

Благодаря SET ROWCOUNT из таблицы TempSalesOrderHeader было удалено только 10 строк, как и ожидалось. Но из таблицы TempSalesOrderDetail было так же удалено 10 строк, что противоречит нашей логике. Если бы я использовал TOP, были бы удалены все 109 строк из TempSalesOrderDetail. Будьте осторожны!

Сейчас, в BOL есть предупреждение, что SET ROWCOUNT не будет поддерживаться для команд DELETE, INSERT и UPDATE. Если вы используете SET ROWCOUNT для удаления и понимаете как оно работает, рекомендуется поменять его на TOP, чтобы избежать проблем в будущем.

Оптимизация

Ещё хотелось бы поделиться вырезкой из BOL:

Для ограничения числа возвращаемых строк пользуйтесь TOP (или OFFSET и FETCH), а не SET ROWCOUNT. Эти методы предпочтительнее, чем SET ROWCOUNT, по следующим причинам:

  • Как часть инструкции SELECT, оптимизатор запросов может принимать значение выражение в предложениях TOP или FETCH во время оптимизации запроса. Поскольку SET ROWCOUNT используется вне инструкции, выполняющей запрос, его значение не может быть учтено при создании плана запроса.

Это означает, что оптимайзер может выбрать план для 100 миллионов строк, вместо того, чтобы построить оптимальный для 100, что может существенно изменить время его выполнения.

Личный опыт

Если быть честным, я часто использовал SET ROWCOUNT в своей практике, но после изучения вопроса, я стал делать это реже.

Facebook

Twitter

Вконтакте

Google+

НАБОР ROWCOUNT (Transact-SQL) — SQL Server

  • 2 минуты на чтение

В этой статье

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Хранилище параллельных данных

Заставляет SQL Server прекратить обработку запроса после того, как будет возвращено указанное количество строк.

Соглашения о синтаксисе Transact-SQL

Синтаксис

  SET ROWCOUNT {number | @number_var}
  

Аргументы

номер | @ number_var
Целое число строк, которые должны быть обработаны перед остановкой конкретного запроса.

Замечания

Важно

Использование SET ROWCOUNT не повлияет на операторы DELETE, INSERT и UPDATE в будущих выпусках SQL Server. Избегайте использования SET ROWCOUNT с операторами DELETE, INSERT и UPDATE в новых разработках и запланируйте изменение приложений, которые в настоящее время его используют.Для аналогичного поведения используйте синтаксис TOP. Дополнительные сведения см. В разделе TOP (Transact-SQL).

Чтобы отключить эту опцию, чтобы возвращались все строки, укажите SET ROWCOUNT 0.

Установка параметра SET ROWCOUNT приводит к прекращению обработки большинства инструкций Transact-SQL, когда на них влияет указанное количество строк. Сюда входят триггеры. Параметр ROWCOUNT не влияет на динамические курсоры, но ограничивает набор строк набора ключей и нечувствительных курсоров. Этот вариант следует использовать с осторожностью.

SET ROWCOUNT переопределяет ключевое слово TOP оператора SELECT, если количество строк меньше значения.

Параметр SET ROWCOUNT устанавливается во время выполнения или во время выполнения, а не во время синтаксического анализа.

Разрешения

Требуется членство в общественной роли.

Примеры

SET ROWCOUNT останавливает обработку после указанного количества строк. В следующем примере обратите внимание, что более 500 строк соответствуют критериям Количество, , меньше 300 .Однако после применения SET ROWCOUNT можно увидеть, что не все строки были возвращены.

  ЕГЭ AdventureWorks2012;
ИДТИ
ВЫБРАТЬ Счетчик (*) КАК Счетчик
ОТ ПРОИЗВОДСТВА.
ГДЕ Количество <300;
ИДТИ
  

Вот результат.

  Счетчик
-----------
537

(Затронута 1 строка (и))
  

Теперь установите ROWCOUNT на 4 и верните все строки, чтобы продемонстрировать, что возвращаются только 4 строки.

  SET ROWCOUNT 4;
ВЫБРАТЬ *
ОТ ПРОИЗВОДСТВА.Инвентарь продукта
ГДЕ Количество <300;
ИДТИ
  
- (затронуты 4 ряда)
  

Примеры: Azure Synapse Analytics и хранилище параллельных данных

SET ROWCOUNT останавливает обработку после указанного количества строк. В следующем примере обратите внимание, что более 20 строк соответствуют критерию AccountType = 'Assets' . Однако после применения SET ROWCOUNT можно увидеть, что не все строки были возвращены.

  - использует AdventureWorks
  
УСТАНОВИТЬ ROWCOUNT 5;
ВЫБРАТЬ * ИЗ [dbo].[DimAccount]
ГДЕ AccountType = 'Активы';
  

Чтобы вернуть все строки, установите ROWCOUNT на 0.

  - использует AdventureWorks
  
УСТАНОВИТЬ ROWCOUNT 0;
ВЫБРАТЬ * ИЗ [dbo]. [DimAccount]
ГДЕ AccountType = 'Активы';
  

См. Также

Операторы SET (Transact-SQL)

Работа с SQL Server ROWCOUNT

В этой статье мы обсудим системные объекты SQL Server @@ ROWCOUNT и ROWCOUNT, пройдя практические
примеры, охватывающие большую часть использования этих системных объектов.

Использование

SQL Server @@ ROWCOUNT - это системная переменная, которая используется для возврата количества строк, на которые повлиял последний выполненный оператор в пакете.

Строки, влияющие на оператор, могут быть любым оператором INSERT, UPDATE, DELETE или SELECT, который выполняется непосредственно перед
выполнение @@ ROWCOUNT, учитывая, что как строки, влияющие на оператор, так и системную переменную
вызывающий запрос находится в том же исполнении.

@@ ROWCOUNT часто используется в циклах, чтобы предотвратить бесконечные циклы и остановить текущий процесс, когда будут обработаны все целевые строки. Он также используется для обработки ошибок, чтобы проверить количество затронутых строк в операторе.

Примеры

Давайте рассмотрим несколько примеров, показывающих различные сценарии использования ROWCOUNT.

Количество выбранных строк

Простое использование системной переменной SQL Server @@ ROWCOUNT - ее вызов непосредственно после оператора SELECT.в
под запросом T-SQL запрос SELECT используется для извлечения первых 100 записей из таблицы Employee, и в том же
выполнения, мы получаем количество строк, которые считываются из исходной таблицы, что составляет 100 строк, как в
пример, как показано ниже:

Если мы попытаемся изменить предыдущий запрос, чтобы получить первые 1000 записей из целевой таблицы, попробуйте проверить
значение, хранящееся в системной переменной SQL Server @@ ROWCOUNT, вы увидите, что возвращаемое значение - 290, а не 1000, поскольку
предыдущий оператор SELECT считывал строки всей исходной таблицы, а это всего 290, как показано ниже:

Если вы запустите два оператора SELECT в одном исполнении с последующим вызовом @@ ROWCOUNT, вы увидите, что он вернет количество строк, возвращенных из второго оператора SELECT. В приведенном ниже сценарии. Первый SELECT
оператор вернул 290 строк, а второй оператор SELECT вернул 296 строк. SQL Server @@ ROWCOUNT вернет
296, что является количеством строк, затронутых вторым оператором SELECT, как показано ниже:

Количество обновленных строк

Системную переменную SQL Server @@ ROWCOUNT можно также использовать для проверки количества строк, на которые влияет
Оператор UPDATE. В следующем скрипте значение системной переменной @@ ROWCOUNT, которое отражает количество
строки, обновленные этим оператором, извлекаются при том же выполнении оператора UPDATE, как показано ниже:

Количество удаленных строк

Вы также можете использовать системную переменную SQL Server @@ ROWCOUNT для возврата количества строк, на которые влияет
выполнил оператор DELETE.В приведенном ниже скрипте значение системной переменной @@ ROWCOUNT, которая отражает
количество строк, удаленных выполненным оператором, извлекается при том же выполнении оператора DELETE, что и
следует:

Пакетное исполнение

При пакетном выполнении системная переменная SQL Server @@ ROWCOUNT будет хранить количество строк, затронутых последним пакетным выполнением. Например, если мы попытаемся выполнить оператор INSERT 20 раз, используя оператор GO 20,
затем проверьте значение, хранящееся в системной переменной @@ ROWCOUNT, вы обнаружите, что значение равно 1.Это связано с тем, что каждый оператор INSERT в этом запросе влияет только на одну строку. Итак, последний оператор INSERT вставит одну строку
затем сохраните этот номер строки в системной переменной, как показано ниже:

Что будет, если я вызову его в отдельном исполнении?

Здесь важно учитывать то, что если вы попытаетесь выполнить определенный запрос, вызовите SQL Server @@ ROWCOUNT
в другом исполнении возвращаемое значение не будет отражать правильное количество строк, затронутых предыдущим
запрос и вернет 1 - количество строк, затронутых оператором вызова @@ ROWCOUNT, как показано ниже:

Для управления потоком

SQL Server @@ ROWCOUNT может использоваться в условии оператора IF для управления потоком оператора на основе
количество строк, возвращенных из последней инструкции. Например, оператор SELECT используется для получения ряда
строк из исходной таблицы, тогда оператор условия IF используется для проверки количества строк, извлеченных из этой
table и выведите относительный комментарий, как показано ниже:

Управление контуром

Системная переменная SQL Server @@ ROWCOUNT также может использоваться для управления циклом и его остановки, когда количество строк
соответствует указанному условию, достигает определенного значения, спасая его от попадания в бесконечный цикл.В сценарии
ниже цикл WHILE продолжит выполнение всего оператора, который используется для удаления всех строк с NULL GUID в
пакеты и прекратить выполнение, когда количество строк, соответствующих этому условию, равно 0, как показано ниже:

Почему он возвращает ноль?

В SQL Server многие операторы сбрасывают значение, хранящееся в @@ ROWCOUNT, на 0. Эти операторы включают DEALLOCATE.
КУРСОР, ЗАКРЫТЬ КУРСОР, ПЕЧАТЬ, ПОВЫСИТЬ, НАЧАТЬ ТРАНЗАКЦИЮ, ЗАВЕРШИТЬ СДЕЛКУ, НАЧАТЬ ПОПЫТКУ / ПОИСК или КОНЕЦ ПОПЫТКИ / ПОИСКА

В приведенном ниже скрипте мы выполняем оператор SELECT в блоке TRY, но этот оператор завершится ошибкой из-за деления на
нулевая ошибка, и вместо этого будет выполнен другой оператор SELECT в блоке CATCH. Если мы попытаемся проверить
количество строк, затронутых запросом SELECT, чтобы определить, какой запрос SELECT выполняется, мы увидим, что результат
из этой переменной возвращается 0, так как он сбрасывается блоком END CATCH, как показано ниже:

Чтобы решить эту проблему, нам нужно сохранить количество затронутых строк в другой переменной сразу после выполнения каждого оператора, чтобы использовать это значение позже.

В следующем скрипте мы определили переменную и сохранили количество строк в этой переменной после SELECT.
операторы, выполняемые внутри обоих блоков TRY и CATCH, затем возвращают эту пользовательскую переменную, где она будет отражать количество строк, затронутых запросом SELECT внутри блока CATCH, как показано ниже:

Количество строк> 2 миллиарда!

Системная переменная SQL Server @@ ROWCOUNT не будет работать, если количество строк, затронутых запросом, превышает 2
миллиард строк. Это потому, что тип данных этой системной переменной - INT.

Чтобы решить эту проблему, SQL Server представляет системную функцию ROWCOUNT_BIG, которая возвращает количество строк, затронутых
конкретный запрос в типе данных BIGINT.

Его можно вызвать сразу после утверждения, которое вы хотите проверить, как показано ниже:

Контроль количества строк

SET ROWCOUNT - это системный объект, который заставляет SQL Server Engine прекратить обработку запроса после того, как будет возвращено указанное количество строк, что чем-то похоже на предложение TOP!

Microsoft не рекомендует использовать SET ROWCOUNT с операторами DELETE, INSERT и UPDATE и вместо этого использует синтаксис TOP, поскольку он не повлияет на эти операторы в будущих выпусках SQL Server.

В приведенном ниже сценарии SET ROWCOUNT используется для переопределения ключевого слова TOP в операторе SELECT и ограничения количества строк меньшим значением, при этом запрос SELECT вернет только 10 записей, как показано ниже:

Вы можете отключить ROWCOUNT и разрешить оператору возвращать все строки, установив для него значение 0. Например,
оператор SELECT ниже вернет 200 строк, не ограничиваясь определенным количеством строк, как показано
ниже:

SET ROWCOUNT также можно использовать для ограничения количества удаляемых строк, что не рекомендуется.В приведенном ниже сценарии мы
видно, что количество строк, соответствующих указанному условию, составляет 30 строк, и мы используем SET ROWCOUNT для удаления
всего 5 рядов, как показано ниже:

Поскольку SET ROWCOUNT будет устаревшим для операторов INSERT, UPDATE и DELETE, мы можем легко заменить его на
синтаксис TOP и удалите только 5 строк, как показано ниже:

Заключение

Мы исследовали системные объекты SQL Server @@ ROWCOUNT и ROWCOUNT, рассмотрев несколько примеров в этой статье. Эта системная переменная возвращает количество строк, затронутых последним выполненным оператором в пакете, и является
чрезвычайно полезен для циклов и обработки ошибок.

Ахмад Ясин (Ahmad Yaseen) - инженер Microsoft по большим данным с глубокими знаниями и опытом в областях SQL BI, администрирования баз данных SQL Server и разработки.

Он является сертифицированным специалистом по решениям Microsoft в области управления данными и аналитикой, сертифицированным партнером по решениям Microsoft в области администрирования и разработки баз данных SQL, партнером разработчика Azure и сертифицированным инструктором Microsoft.

Кроме того, он публикует свои советы по SQL во многих блогах.

Посмотреть все сообщения от Ahmad Yaseen

Последние сообщения от Ahmad Yaseen (посмотреть все)

MSSQL @@ Row Count Function

Переменная @@ ROW COUNT возвращает количество строк, прочитанных последним выполненным оператором. Если какой-либо оператор не возвращает ни одной строки, тогда значение переменной @@ ROWCOUNT устанавливается равным нулю.

MSSQL @@ ROWCOUNT СИНТАКСИС ПЕРЕМЕННОЙ


@@ ROWCOUNT

Использование @@ означает, что это глобальная переменная.Также @@ ROWCOUNT возвращает значение типа int, т.е. максимальное количество строк, которое может вернуть @@ ROWCOUNT, равно 231 (2 147 483 647). Для возврата строк, превышающих этот предел, используется функция ROWCOUNT_BIG.

MSSQL @@ ROWCOUNT ОТЧЕТЫ

Операторы

SQL могут устанавливать значение в @@ ROWCOUNT следующими способами:

  • 1. Установите @@ ROWCOUNT равным количеству затронутых или прочитанных строк. Строки могут или не могут быть отправлены клиенту.
  • 2. Сохранить @@ ROWCOUNT из предыдущего выполнения оператора.
  • 3. Сбросьте @@ ROWCOUNT на 0, но не возвращайте значение клиенту.

Ниже приведен пример функции @@ ROW COUNT из таблицы «Сотрудник»:

MSSQL

@@ ROW COUNT Пример


ВЫБРАТЬ * ОТ сотрудника
ВЫБРАТЬ @@ ROWCOUNT
ВЫБРАТЬ @@ ROWCOUNT

Использование таблицы базы данных «Сотрудник»

Идентификационный номер сотрудника Имя сотрудника Возраст Пол Расположение Заработная плата
1001 Генри 54 Мужской Нью-Йорк 100000
1002 Тина 36 Женский Москва 80000
1003 Иоанна 24 Мужской Лондон 40000
1004 Миля 31 Мужской Лондон 70000
1005 Тара 26 Женский Москва 50000
1006 Софи 29 Женский Лондон 60000

MSSQL @@ ROWCOUNT Результаты

MSSQL @@ ROWCOUNT вывод из таблицы «Сотрудник» будет

6

1

Первый @@ ROWCOUNT возвращает количество строк, прочитанных оператором «Select * From Employee» 1. е. 6. В то время как второй @@ ROWCOUNT возвращает количество строк, прочитанных первым оператором «SELECT @@ ROWCOUNT», т.е. 1.

Отметить страницу в закладки

SQL ROWCOUNT

Функция установки SQL ROWCOUNT заставляет SQL-сервер останавливать обработку запроса после возврата указанных чисел. Базовый синтаксис ROWCOUNT в SQL Server показан ниже:

 SET ROWCOUNT {число (или числовая переменная)}

-- Например,
УСТАНОВИТЬ ROWCOUNT 4; 

Мы собираемся использовать показанные ниже данные для этой демонстрации SQL Server.

Какая польза от SQL ROWCOUNT?

В этом примере мы покажем вам, как SQL Server SET ROWCOUNT повлияет на запросы.Прежде чем мы перейдем к основному примеру SQL Server, позвольте мне использовать функцию COUNT, чтобы найти количество строк, содержащихся в нашей таблице сотрудников.

 ВЫБРАТЬ [Имя]
      ,[Фамилия]
      ,[Образование]
      ,[Занятие]
      ,[Годовой доход]
      ,[Продажи]
      ,[Дата приема на работу]
ОТ [Сотрудник];

ВЫБРАТЬ СЧЕТЧИК (*) КАК [Количество записей] ОТ [Сотрудник] 

Из приведенного выше снимка экрана видно, что таблица содержит 14 записей. Теперь давайте используем ROWCOUNT, чтобы ограничить количество записей 7.

 SET ROWCOUNT 7;
ИДТИ
ВЫБЕРИТЕ [Имя]
      ,[Фамилия]
      ,[Образование]
      ,[Занятие]
      ,[Годовой доход]
      ,[Продажи]
      ,[Дата приема на работу]
ОТ [Сотрудник]; 

Как видите, запрос возвращает семь записей. Это связано с тем, что, когда обработка запроса достигает 7-й записи, она прекращает обработку других записей.

ПРИМЕЧАНИЕ: Хотя этот ROWCOUNT не влияет на операторы DELETE, UPDATE и INSERT, рекомендуется избегать этого оператора.Вместо этого вы можете использовать TOP Clause

.

SET SQL ROWCOUNT OFF Пример

Используйте SET ROWCOUNT 0; для установки остановки ROWCOUNT

 УСТАНОВИТЬ ROWCOUNT 0;
ИДТИ
ВЫБЕРИТЕ [Имя]
      ,[Фамилия]
      ,[Образование]
      ,[Занятие]
      ,[Годовой доход]
      ,[Продажи]
      ,[Дата приема на работу]
ОТ [Сотрудник]; 

Используйте Sql-сервер ROWCOUNT ON TOP Пример предложения

Если вы используете и предложение TOP, и ROWCOUNT, эта функция переопределит предложение TOP.

 SET ROWCOUNT 5;
ИДТИ
ВЫБЕРИТЕ ТОП 6 [Имя]
      ,[Фамилия]
      ,[Образование]
      ,[Занятие]
      ,[Годовой доход]
      ,[Продажи]
      ,[Дата приема на работу]
ОТ [Сотрудник]; 

Как вы можете видеть на скриншоте ниже, мы установили ROWCOUNT как 5 и выбрали TOP 6.Здесь он вернул первые 5 записей, потому что, как только он достигнет 5, выполнение запроса будет остановлено.

УСТАНОВИТЬ ROWCOUNT

Заставляет Microsoft® SQL Server ™ прекратить обработку запроса после того, как будет возвращено указанное количество строк.

Синтаксис

SET ROWCOUNT { номер | @ number_var }

Аргументы

номер | @ номер_варь

Число (целое число) строк, которые должны быть обработаны перед остановкой данного запроса.

Замечания

Рекомендуется, чтобы операторы DELETE, INSERT и UPDATE, в настоящее время использующие SET ROWCOUNT, были переписаны с использованием синтаксиса TOP. Для получения дополнительной информации см. УДАЛИТЬ, ВСТАВИТЬ или ОБНОВИТЬ.

Параметр SET ROWCOUNT игнорируется для операторов INSERT, UPDATE и DELETE для удаленных таблиц и локальных и удаленных секционированных представлений.

Чтобы отключить эту опцию (чтобы возвращались все строки), укажите SET ROWCOUNT 0.

Примечание Установка параметра SET ROWCOUNT приводит к прекращению обработки большинства инструкций Transact-SQL, когда на них влияет указанное количество строк.Сюда входят триггеры и операторы изменения данных, такие как INSERT, UPDATE и DELETE. Параметр ROWCOUNT не влияет на динамические курсоры, но ограничивает набор строк набора ключей и нечувствительных курсоров. Этот параметр следует использовать с осторожностью и в первую очередь с оператором SELECT.

SET ROWCOUNT переопределяет ключевое слово TOP оператора SELECT, если количество строк меньше значения.

Параметр SET ROWCOUNT устанавливается во время выполнения или во время выполнения, а не во время синтаксического анализа.

Разрешения

УСТАНОВИТЬ ROWCOUNT разрешения по умолчанию для всех пользователей.

Примеры

SET ROWCOUNT останавливает обработку после указанного количества строк. В этом примере обратите внимание, что строки размером x соответствуют критериям авансов, меньших или равных 5000 долларов США. Однако по количеству строк, возвращенных обновлением, можно увидеть, что не все строки были обработаны. ROWCOUNT влияет на все инструкции Transact-SQL.

  ЕГЭ пабов
ИДТИ
ВЫБРАТЬ count (*) AS Cnt
ИЗ названий
ГДЕ продвижение> = 5000
ИДТИ
  

Вот результат:

  Cnt
-----------
11

(Затронута 1 строка (и))
  

Теперь установите ROWCOUNT на 4 и обновите все строки с авансом в 5000 долларов или больше.

  - УСТАНОВИТЬ ROWCOUNT на 4.
УСТАНОВИТЬ ROWCOUNT 4
ИДТИ
ОБНОВИТЬ названия
УСТАНОВИТЬ продвижение = 5000
ГДЕ продвижение> = 5000
ИДТИ
  

См. Также

НАБОР

SQL COUNT функция - w3resource

COUNT () функция

Функция SQL COUNT () возвращает количество строк в таблице, удовлетворяющих критериям, указанным в предложении WHERE.Он устанавливает количество строк или значения столбца, отличные от NULL.
COUNT () возвращает 0, если совпадающих строк не было.

Синтаксис:

 СЧЕТЧИК (*)
COUNT ([ALL | DISTINCT] выражение)
 

Приведенный выше синтаксис является общим стандартным синтаксисом SQL 2003 ANSI. Это помогает понять, как используется функция SQL COUNT (). Но разные поставщики баз данных могут использовать разные способы применения функции COUNT ().

Как вы видите, MySQL, PostgreSQL и Microsoft SQL Server используют тот же синтаксис, что и приведенный выше. Но DB2 и Oracle немного отличаются.

В целом, вы можете использовать *, ALL или DISTINCT или какое-нибудь выражение вместе с COUNT, чтобы COUNT количество строк относительно. какое-то условие или все строки, в зависимости от аргументов, которые вы используете вместе с функцией COUNT ().

Поддержка СУБД: функция COUNT ()

СУБД Команда
MySQL Поддерживается
PostgreSQL Поддерживается
SQL Server Поддерживается
Оракул Поддерживается

Синтаксис DB2 и Oracle:

 COUNT ({* | [DISTINCT] выражение}) OVER (предложение_окна)
 

Параметры:

Имя Описание
ВСЕ Применяется ко всем значениям.ALL возвращает количество значений, отличных от NULL.
ОТЛИЧИТЬ Игнорирует повторяющиеся значения, и COUNT возвращает количество уникальных ненулевых значений.
выражение Выражение, состоящее из одной константы, переменной, скалярной функции или имени столбца, а также может быть частями SQL-запроса, которые сравнивают значения с другими значениями. Выражение любого типа, кроме текста или изображения. Агрегатные функции и подзапросы не допускаются.
* Подсчитывает все строки в целевой таблице, независимо от того, содержат ли они NULL или нет.

Синтаксическая диаграмма - функция COUNT ()

На следующих страницах мы обсудили, как применять COUNT () с различными предложениями SQL. Для этих приложений мы использовали Oracle 10g Express Edition.

Важная вещь о функции COUNT ():

Когда * используется для COUNT (), все записи (строки) подсчитываются, если какое-то содержимое NULL, но COUNT (имя_столбца) не подсчитывает запись, если его поле имеет значение NULL. См. Следующие примеры:

SQL COUNT строк в таблице

В следующем примере используется символ звездочки (*), за которым следует SQL COUNT (), который указывает все строки таблицы, даже если есть какое-либо значение NULL.

Образец таблицы: заказы

Чтобы получить количество строк в таблице заказов, можно использовать следующий оператор SQL:

Код SQL:

  ВЫБРАТЬ СЧЕТЧИК (*)
ОТ заказов;
  

Выход:

 СЧЕТЧИК (*)
---------
       34
 

Изображение:

Выберите COUNT (*) из нескольких таблиц

Следующий запрос COUNT количество строк из двух разных таблиц (здесь мы используем сотрудников и отделы) с помощью команды COUNT (*).

Код SQL:

  ВЫБРАТЬ (
      ВЫБРАТЬ СЧЕТЧИК (*)
ОТ сотрудников
) AS Total_Employees,
(ВЫБРАТЬ СЧЕТЧИК (*)
ИЗ отделов
) КАК No_Of_Departments
ОТ двойного
  

Выход:

 TOTAL_EMPLOYEES NO_OF_DEPARTMENTS
--------------- -----------------
            107 27
 

SQL COUNT () с именем столбца

В этом примере функция SQL COUNT () исключает значения NULL для определенного столбца, если столбец указан в качестве аргумента в скобках функции COUNT.

Образец таблицы: listofitem

Чтобы получить количество строк в таблице listofitem с условием -

1. COUNT количество строк для столбца coname

можно использовать следующий оператор SQL:

Код SQL:

  ВЫБРАТЬ СЧЕТЧИК (coname)
ОТ listofitem;
  

Выход:

 СЧЕТЧИК (CONAME)
-------------
            2
 

Объяснение:

Приведенный выше оператор подсчитывает те строки для столбца coname, которые не равны NULL.

SQL COUNT строк с определенным пользователем заголовком столбца

Получить количество строк в таблице заказов с условием -

1. Результат должен отображаться с заголовком «Количество строк»,

можно использовать следующий оператор SQL:

Код SQL:

  ВЫБРАТЬ СЧЕТЧИК (*) как «Количество строк»
ОТ заказов;
  

Выход:

 Количество рядов
--------------
            36
 

SQL COUNT () с предложением where

Предложение WHERE может использоваться вместе с функцией SQL COUNT () для выбора определенных записей из таблицы по заданному условию.

Пример:

Образец таблицы: заказы

Получить количество строк в таблице заказов с условием -

1. ord_amount против заказа больше 1500,

можно использовать следующий оператор SQL:

  ВЫБРАТЬ СЧЕТЧИК (*) как «Количество строк»
ИЗ заказов
ГДЕ ord_amount> 1500;
  

Выход:

 Количество рядов
--------------
            22
 

Применение функции COUNT ()

На следующих страницах мы обсудили, как применять COUNT () с различными предложениями SQL.Для этих приложений мы использовали Oracle 10g Express Edition.

COUNT with DISTINCT страница обсуждает, как применить функцию COUNT с DISTINCT, а также обсуждает, как применить функцию COUNT с предложением ALL. В отличие от использования *, когда используется ALL, значения NULL не выбираются.

На странице

COUNT HAVING обсуждается, как применить функцию COUNT с предложением HAVING и HAVING и GROUP BY.

COUNT со страницей GROUP BY обсуждает, как применить функцию COUNT с
GROUP BY в порядке возрастания и убывания.

Примечание: выходные данные указанного оператора SQL, показанного здесь, получены с использованием Oracle Database 10g Express Edition

Вот слайд-презентация всех агрегатных функций.

Практические упражнения SQL

Хотите улучшить статью выше? Публикуйте свои заметки / комментарии / примеры через Disqus.

Предыдущая: Агрегатные функции
Следующая: COUNT с Distinct

@@ ROWCOUNT - получить количество строк, затронутых последним оператором в SQL Server

В SQL Server вы можете использовать системную функцию @@ ROWCOUNT , чтобы вернуть количество строк, затронутых последним оператором T-SQL.

Например, если запрос возвращает 4 строки, @@ ROWCOUNT вернет 4.

Пример 1 - Выбор данных

Вот простой пример, демонстрирующий, как это работает.

  ВЫБРАТЬ * ИЗ собак;
ВЫБРАТЬ @@ ROWCOUNT;  

Результат:

 + --------- + ----------- + ----------- +
| DogId | DogName | GoodDog |
| --------- + ----------- + ----------- |
| 1 | Получить | 0 |
| 2 | Пушистый | 0 |
| 3 | Wag | 0 |
+ --------- + ----------- + ----------- +
(Затронуты 3 ряда)
+ -------------------- +
| (Без имени столбца) |
| -------------------- |
| 3 |
+ -------------------- +
(Затронута 1 строка) 

В этом случае мой оператор SELECT вернул 3 строки, поэтому @@ ROWCOUNT вернул 3.

Пример 2 - Обновление данных

Вот пример использования @@ ROWCOUNT с оператором UPDATE , чтобы проверить, были ли обновлены какие-либо строки.

  ОБНОВЛЕНИЕ Собаки
УСТАНОВИТЬ GoodDog = 1
ГДЕ DogId = 4
ЕСЛИ @@ ROWCOUNT> 0
    ПЕЧАТЬ «Ваша собака будет соответственно вознаграждена»;
ЕЩЕ
    ПЕЧАТЬ «Собака вне системы не может быть хорошей собакой»
GO  

Результат:

 (затронуто 0 строк)
Собака вне системы не может быть хорошей собакой 

В этом случае строки не были обновлены, потому что DogId не существует в таблице.Мы смогли использовать @@ ROWCOUNT с оператором IF , чтобы вернуть пользователю соответствующее сообщение.

Вот он снова, но на этот раз собака существует.

  ОБНОВЛЕНИЕ Собаки
УСТАНОВИТЬ GoodDog = 1
ГДЕ DogId = 1
ЕСЛИ @@ ROWCOUNT> 0
    ПЕЧАТЬ «Ваша собака будет соответственно вознаграждена»;
ЕЩЕ
    ПЕЧАТЬ «Собака вне системы не может быть хорошей собакой»
GO  

Результат:

 (затронута 1 строка)
Ваша собака будет вознаграждена соответственно 

Чрезвычайно большой набор данных?

Если вы думаете, что количество строк, затронутых оператором, будет более 2 миллиардов, используйте вместо этого ROWCOUNT_BIG () .

Вы можете использовать его так же, как @@ ROWCOUNT .

  ОБНОВЛЕНИЕ Собаки
УСТАНОВИТЬ GoodDog = 1
ГДЕ DogId = 4
ЕСЛИ ROWCOUNT_BIG ()> 0
    ПЕЧАТЬ «Ваша собака будет соответственно вознаграждена»;
ЕЩЕ
    ПЕЧАТЬ «Собака вне системы не может быть хорошей собакой»
GO  

Результат:

 (затронуто 0 строк)
Собака вне системы не может быть хорошей собакой 

Когда

@@ ROWCOUNT сбрасывается

Заявления, такие как USE , SET <опция> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION или COMMIT TRANSACTION сбросить @@ ROWCOUNT значение 0 .

Сам по себе запуск S ELECT @@ ROWCOUNT также вернет 0 .

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *