2012-03-01 31 views
1

我是新手,请原谅我的行话。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语句,而不必更新各他们个人。

+0

现在您正在执行变量,查看存储过程并传入参数,您将不必编辑SQL。你可以做'EXEC YourQueryProcedure 20120101,20120131' – 2012-03-01 18:43:30

回答

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 

作为一个侧面说明,使用之间,日测试时,因为它可以是因为每个日期默认为午夜的时间混乱的小心。所以,正如你所写的,午夜之后你在'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

假设你正在运行的所有的这些在一个脚本中,

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

( SQL Server 2008+)

+4

只需注意,假设SQL Server,这只会在2008+以上。否则,您将需要在单独的行上进行声明和设置(如Joe所做的那样)。我不能说其他版本的SQL – 2012-03-01 17:19:44