SQL Server中的永久变量和全局变量

时间:2012-03-01 17:10:46

标签: sql-server

我是新手,所以请原谅我的行话。

我分两部分运行以下代码:

select * from #table1
where date between 20120101 and 20120131

select * from #table2
where date between 20120101 and 20120131

我有很多这样的小片段,我必须单独运行才能看到每次运行的结果。但是,当我需要这样做的时候,我每个月都会更改日期。

所以,我想知道是否有类似的东西:

declare startdate = 20120101
declare enddate = 20120131

select * from #table1
where date between startdate and enddate

select * from #table2
where date between startdate and enddate

我的想法是,我会声明startdateenddate变量,然后我可以运行剩余的select语句,而无需单独更新每个变量。

2 个答案:

答案 0 :(得分:6)

你非常接近。只需要清理一下语法。变量用“@”符号和数据类型声明。

DECLARE @startdate DATETIME
SET @startdate = '2012-01-01'

DECLARE @enddate DATETIME
SET @enddate = '2012-01-31'

SELECT * FROM #table1
WHERE date BETWEEN @startdate AND @enddate

SELECT * FROM #table2
WHERE date BETWEEN @startdate AND @enddate

作为旁注,使用BETWEEN和日期测试时要小心,因为它可能会让人感到困惑,因为每个日期默认为午夜时间。所以,正如所写,你将在午夜后找不到'2012-01-31'的任何记录。恕我直言,通过将你的结束日期提高一天并进行如下测试来明确这一点:

DECLARE @startdate DATETIME
SET @startdate = '2012-01-01'

DECLARE @enddate DATETIME
SET @enddate = '2012-02-01'

SELECT * FROM #table1
WHERE date >= @startdate 
  AND date <  @enddate

答案 1 :(得分:1)

假设您在一个脚本中运行所有这些,

declare @startdate datetime = '2012-01-01'
declare @enddate datetimg = '2012-01-31'

(SQL Server 2008 +)