2012-03-01 60 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