如何不执行所有代码,只执行变量DECLARE开头和过程结束?

问题描述 投票:0回答:1

我有一段 SQL 代码,可以做很多事情,我正在程序末尾测试一部分

问题是开头有一些变量,最后使用了它们,我不想执行所有代码,因为它需要一些时间处理,它看起来像这样:

    --Some variables are created and manipulated

DECLARE @DT DATE
SET @DT = ISNULL(@DT, GETDATE())
DECLARE @DF DATE = EOMONTH(@DT)
      , @DI DATE = DATEADD(DAY, 1, EOMONTH(@DT, -1))
DECLARE @DTI DATETIME = @DI
      , @DTF DATETIME = @DF
SET @DTF += 1

/*
    slow proccess
*/

    --In the end the same variables are reused

SELECT *
FROM SYS.TABLES
WHERE create_date BETWEEN @DTI AND @DTF

我可以重复使用声明,如下所示:


    --Some variables are created and manipulated

DECLARE @DT DATE
SET @DT = ISNULL(@DT, GETDATE())
DECLARE @DF DATE = EOMONTH(@DT)
      , @DI DATE = DATEADD(DAY, 1, EOMONTH(@DT, -1))
DECLARE @DTI DATETIME = @DI
      , @DTF DATETIME = @DF
SET @DTF += 1

/*
    slow proccess
*/

    --In the end the same variables are reused


DECLARE @DT DATE
SET @DT = ISNULL(@DT, GETDATE())
DECLARE @DF DATE = EOMONTH(@DT)
      , @DI DATE = DATEADD(DAY, 1, EOMONTH(@DT, -1))
DECLARE @DTI DATETIME = @DI
      , @DTF DATETIME = @DF
SET @DTF += 1

SELECT *
FROM SYS.TABLES
WHERE create_date BETWEEN @DTI AND @DTF

可以用,但是很难看,还有其他更好的方法吗?

PS:这不是真正的代码,代码几乎有2k行,这只是一个小例子

sql-server t-sql variables declare
1个回答
0
投票

您可以用表达式替换最终选择中的变量。像这样的东西:

SELECT *
FROM SYS.TABLES
WHERE create_date BETWEEN DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) AND DATEADD(day,1,EOMONTH(GETDATE()))
© www.soinside.com 2019 - 2024. All rights reserved.