【问题标题】:SQL SERVER - Need a Simple T-SQL Program to iterate dateSQL SERVER - 需要一个简单的 T-SQL 程序来迭代日期
【发布时间】:2018-03-24 17:16:35
【问题描述】:

我调用的程序每天都在工作。我需要将当前日期之前的一天传递/迭代到程序以执行操作。可以提供一些帮助。这是我尝试过的示例,但它无法正常工作。我是初学者。

USE [aaa]
GO

DECLARE @return_value int
DECLARE @VarDate1  Datetime ='2015-09-30'
DECLARE @VarDate2  Datetime ='2015-09-30'


WHILE (@VarDate2 <= '2015-12-10') 
BEGIN
EXEC    @return_value = [dbo].[procname]
        @tday1 = @VarDate1 ,
        @tday2 = @VarDate2

SET @VarDate2 = DATEADD(DAY, 1, @VarDate2)
set @VarDate1 = @VarDate2

SELECT  'Return Value' = @return_value
END
GO

【问题讨论】:

  • 定义fails to work。你有错误吗?它现在循环吗?另外,为什么你总是有两个相同的变量?
  • PLSQL 和 SQL SERVER 不一样。请删除plsql标签。
  • @WEI_DBA 我没有收到任何错误,该过程没有结束。该过程需要开始日期和结束日期,因此请保持相同。
  • @mux 坏习惯很难改掉,而且会让沟通变得困难。如果您的程序需要开始和结束日期参数,那么为什么您将变量命名为 VarDate1 和 VarDate2?您需要更加努力地成为一名更好的开发人员 - 其中一部分是让您的代码更易读、更容易理解。
  • @mux 但是让我们继续。您的循环不是当前的问题。所以你需要把你的逻辑分解成更小的、可测试的部分。由于您的程序需要开始日期和结束日期,该程序是否还假设这些日期NOT 相同?现在是通过使用第一次迭代中使用的值手动执行过程来检查的好时机。这行得通吗?

标签: sql sql-server sql-server-2008 while-loop


【解决方案1】:

通过检查您的代码,您可能会在尝试设置@VarDate1 和@VarDate2 的值时遇到错误。试试下面的代码:

DECLARE @return_value int
DECLARE @VarDate1 Datetime = CAST('20150930 00:00:00' AS DATETIME)
DECLARE @VarDate2 Datetime = CAST('20150930 00:00:00' AS DATETIME)


WHILE (@VarDate2 <= '20151210') BEGIN

    SET @VarDate2 = DATEADD(DAY, 1, @VarDate2)
    SET @VarDate1 = @VarDate2

    PRINT @VarDate2 --Change your logic here
END
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2023-03-26
    • 2020-05-11
    相关资源
    最近更新 更多