Sql Строки ведения журнала на сервере, затронутые в операторе выбора хранимой процедуры - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть таблица журнала, в которую записывают различную информацию, связанную с вызовом, в некоторые хранимые процедуры, которые содержат только операторы select. Одной из этих сведений является количество строк, возвращаемых сохраненными предкурсами.

Один из способов сделать это будет следующим:

  1. Выполнить подсчет относительно окончательной инструкции выбора
  2. Вставка информации в таблицу журнала
  3. Выполнение окончательной инструкции выбора

Есть ли способ восстановить информацию, затронутую строками, без выполнения двойного запроса (первый с считай а второй с выбором)?

Заранее спасибо

1 Ответ

1 голос
/ 21 апреля 2020

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

См .: https://docs.microsoft.com/en-us/sql/t-sql/functions/rowcount-transact-sql?view=sql-server-ver15

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

DROP TABLE IF EXISTS ##LOG

CREATE TABLE ##Log
(
    ProcName NVARCHAR(100)
    ,ExecutionTime DATETIME
    ,TotalRowsReturned INT
)

GO

CREATE PROCEDURE TestProc
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @numRows INT = RAND()*(50-5)+5;

    SELECT TOP (@numRows) *
    FROM sys.objects

    INSERT INTO ##Log
    (
        ProcName,
        ExecutionTime,
        TotalRowsReturned
    )
    SELECT
        OBJECT_NAME(@@PROCID)
        ,GETDATE()
        ,@@ROWCOUNT

    SET NOCOUNT OFF
END

GO


EXEC TestProc
GO 5

SELECT * FROM ##Log
...