52ky 发表于 2022-5-5 08:57:28

SELECT查看临时表的结果集s)数据?

问题
我必须创建一个存储过程来向名为 #TempPayPeriod 的临时表添加新的付款期(增加 7 天)。此表包含 PayPeriod 表中的所有付款期间数据。所以我创建了一个程序,将这些永久数据全部移动到这个临时表中,并向那个临时表添加一个新的付款周期。

现在我需要查看该临时表,以便将其与该数据进行比较并确保它匹配

在我的代码中,我在执行过程后立即编写了 SELECT * FROM #TempPayPeriod。我成功运行命令但没有要查看的结果集?
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
回答
存储过程完成后,临时表超出范围。您需要将 select 语句移动到存储过程中,或者使用双井号表示法使临时表成为全局表。 ##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



页: [1]
查看完整版本: SELECT查看临时表的结果集s)数据?