我有一段 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行,这只是一个小例子
您可以用表达式替换最终选择中的变量。像这样的东西:
SELECT *
FROM SYS.TABLES
WHERE create_date BETWEEN DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)) AND DATEADD(day,1,EOMONTH(GETDATE()))