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

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

在我的代码中,我在执行过程后立即编写了 SELECT * FROM #TempPayPeriod。我成功运行命令但没有要查看的结果集?
  1. USE PR
  2. GO

  3. CREATE PROC spAddPay
  4.             @StartDate smalldatetime = NULL,
  5.             @EndDate smalldatetime = NULL
  6. AS
  7. DROP TABLE IF EXISTS #TempPayPeriod;

  8. SELECT * INTO #TempPayPeriod FROM PayPeriod;

  9. SET @StartDate = (SELECT MAX(PerFrom) FROM #TempPayPeriod);
  10. SET @StartDate = DATEADD(day, 7, @StartDate);
  11. SET @EndDate = (SELECT MAX(PerThru) FROM #TempPayPeriod);
  12. SET @EndDate = DATEADD(day, 7, @EndDate);

  13. BEGIN TRY
  14.     INSERT #TempPayPeriod
  15.     VALUES (@StartDate, @EndDate);
  16. END TRY
  17. BEGIN CATCH
  18.     PRINT 'Record was not added';
  19.     PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
  20. END CATCH

  21. EXEC spAddPay;
  22. SELECT * FROM #TempPayPeriod;
  23. GO
复制代码

回答
存储过程完成后,临时表超出范围。您需要将 select 语句移动到存储过程中,或者使用双井号表示法使临时表成为全局表。 ##TempPayPeriod

选项 1 - 从存储过程返回结果
  1. USE PR
  2. GO

  3. CREATE PROC spAddPay
  4.             @StartDate smalldatetime = NULL,
  5.             @EndDate smalldatetime = NULL
  6. AS
  7. BEGIN
  8.     DROP TABLE IF EXISTS #TempPayPeriod;

  9.     SELECT * INTO #TempPayPeriod FROM PayPeriod;

  10.     SET @StartDate = (SELECT MAX(PerFrom) FROM #TempPayPeriod);
  11.     SET @StartDate = DATEADD(day, 7, @StartDate);
  12.     SET @EndDate = (SELECT MAX(PerThru) FROM #TempPayPeriod);
  13.     SET @EndDate = DATEADD(day, 7, @EndDate);

  14.     BEGIN TRY
  15.         INSERT #TempPayPeriod
  16.         VALUES (@StartDate, @EndDate);
  17.     END TRY
  18.     BEGIN CATCH
  19.         PRINT 'Record was not added';
  20.         PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
  21.     END CATCH

  22.     SELECT * FROM #TempPayPeriod
  23. END

  24. GO

  25. EXEC spAddPay;

  26. GO
复制代码

选项 2 - 使用全局临时表
  1. USE PR
  2. GO

  3. CREATE PROC spAddPay
  4.             @StartDate smalldatetime = NULL,
  5.             @EndDate smalldatetime = NULL
  6. AS
  7. BEGIN
  8. DROP TABLE IF EXISTS ##TempPayPeriod;

  9. SELECT * INTO ##TempPayPeriod FROM PayPeriod;

  10. SET @StartDate = (SELECT MAX(PerFrom) FROM ##TempPayPeriod);
  11. SET @StartDate = DATEADD(day, 7, @StartDate);
  12. SET @EndDate = (SELECT MAX(PerThru) FROM ##TempPayPeriod);
  13. SET @EndDate = DATEADD(day, 7, @EndDate);

  14. BEGIN TRY
  15.     INSERT ##TempPayPeriod
  16.     VALUES (@StartDate, @EndDate);
  17. END TRY
  18. BEGIN CATCH
  19.     PRINT 'Record was not added';
  20.     PRINT 'Error: ' + CONVERT(varchar, ERROR_NUMBER(),1) + ': ' + CONVERT(varchar, ERROR_MESSAGE(),1);
  21. END CATCH
  22. END
  23. EXEC spAddPay;
  24. SELECT * FROM ##TempPayPeriod;
  25. GO
复制代码






上一篇:仅当输入数字时,如何才能使 socket.on 保持活动状态?
下一篇:将上下文路径添加到 Spring Boot 应用程序