Просмотреть набор результатов данных временной таблицы с помощью SELECT в хранимой процедуре, которая создает ту же временную таблицу? - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужно создать хранимую процедуру, которая добавляет новый период оплаты (добавляет 7 дней) во временную таблицу с именем #TempPayPeriod. В этих таблицах содержатся все данные о периоде выплат из таблицы PayPeriod. Поэтому я создаю процедуру, которая берет эти постоянные данные, перемещает их все во временную таблицу и добавляет новый период оплаты к этой временной таблице.

Что я и сделал сейчас, мне нужно просмотреть эту временную таблицу, чтобы я мог сравнить это с этими данными и убедитесь, что он соответствует

enter image description here

В моем коде я пишу SELECT * FROM #TempPayPeriod сразу после выполнения процедуры. Я получаю Command run successfully, но нет результатов для просмотра?

USE PR
GO

CREATE PROC spAddPay
            @StartDate smalldatetime = NULL,
            @EndDate smalldatetime = NULL
AS
DROP TABLE IF EXISTS #TempPayPeriod;

SELECT * INTO #TempPayPeriod FROM PayPeriod;

SET @StartDate = (SELECT MAX(PerFrom) FROM #TempPayPeriod);
SET @StartDate = DATEADD(day, 7, @StartDate);
SET @EndDate = (SELECT MAX(PerThru) FROM #TempPayPeriod);
SET @EndDate = DATEADD(day, 7, @EndDate);

BEGIN TRY
    INSERT #TempPayPeriod
    VALUES (@StartDate, @EndDate);
END TRY
BEGIN CATCH
    PRINT 'Record was not added';
    PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
END CATCH

EXEC spAddPay;
SELECT * FROM #TempPayPeriod;
GO

1 Ответ

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

Ваша временная таблица теряет область действия после завершения хранимой процедуры. Вам нужно будет переместить оператор выбора внутри хранимой процедуры или сделать временную таблицу глобальной, используя нотацию двойного фунта. ##TempPayPeriod

ОПЦИЯ 1 - вернуть результат из хранимой процедуры

USE PR
GO

CREATE PROC spAddPay
            @StartDate smalldatetime = NULL,
            @EndDate smalldatetime = NULL
AS
BEGIN
    DROP TABLE IF EXISTS #TempPayPeriod;

    SELECT * INTO #TempPayPeriod FROM PayPeriod;

    SET @StartDate = (SELECT MAX(PerFrom) FROM #TempPayPeriod);
    SET @StartDate = DATEADD(day, 7, @StartDate);
    SET @EndDate = (SELECT MAX(PerThru) FROM #TempPayPeriod);
    SET @EndDate = DATEADD(day, 7, @EndDate);

    BEGIN TRY
        INSERT #TempPayPeriod
        VALUES (@StartDate, @EndDate);
    END TRY
    BEGIN CATCH
        PRINT 'Record was not added';
        PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
    END CATCH

    SELECT * FROM #TempPayPeriod
END

GO

EXEC spAddPay;

GO

ОПЦИЯ 2 - Использовать глобальную временную таблицу

USE PR
GO

CREATE PROC spAddPay
            @StartDate smalldatetime = NULL,
            @EndDate smalldatetime = NULL
AS
BEGIN
DROP TABLE IF EXISTS ##TempPayPeriod;

SELECT * INTO ##TempPayPeriod FROM PayPeriod;

SET @StartDate = (SELECT MAX(PerFrom) FROM ##TempPayPeriod);
SET @StartDate = DATEADD(day, 7, @StartDate);
SET @EndDate = (SELECT MAX(PerThru) FROM ##TempPayPeriod);
SET @EndDate = DATEADD(day, 7, @EndDate);

BEGIN TRY
    INSERT ##TempPayPeriod
    VALUES (@StartDate, @EndDate);
END TRY
BEGIN CATCH
    PRINT 'Record was not added';
    PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
END CATCH
END
EXEC spAddPay;
SELECT * FROM ##TempPayPeriod;
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...