SQL Server中的永久变量和全局变量
问题描述:
我是新手,请原谅我的行话。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
的想法是,我要再次声明startdate
和enddate
变量然后我可以运行剩余的SELECT语句,而不必更新各他们个人。
答
你非常接近。只需要清理一下语法。变量用“@”符号和数据类型声明。
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
答
假设你正在运行的所有的这些在一个脚本中,
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
现在您正在执行变量,查看存储过程并传入参数,您将不必编辑SQL。你可以做'EXEC YourQueryProcedure 20120101,20120131' – 2012-03-01 18:43:30