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]