2012-03-01 10 views
1

私は初心者ですので、私の言葉をお試しください。SQL Serverの恒久変数とグローバル変数

私は2つの部分に以下のコードを実行しています:

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 
アイデアは、私は一度ずつ更新しなくても、私は、その後、残りのselect文を実行することができ startdateenddate変数を宣言するだろうということです

それぞれ個別に

+0

これで、変数の実行、ストアドプロシージャの調査、パラメータの受け渡しが行われ、SQLをまったく編集する必要がなくなりました。 EXEC YourQueryProcedure 20120101,20120131' –

答えて

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' 

を:それは良いでしょう、私見では、1日にして、終了日をぶつけそして、このようにテストすることによってここに明示されるようにSQL Server 2008以降)

+4

SQL Serverを前提とすると、これは2008年以降にのみ有効です。それ以外の場合は、宣言を行い、別の行に設定する必要があります(Joeと同じように)。私は他のバージョンのSQLについて話すことができません –