2012-03-01 5 views
1

나는 초보자이기 때문에 내 용어에 대해 사과하십시오.SQL 서버의 영구 변수 및 전역 변수

나는 두 가지에 다음 코드를 실행하고 있습니다 :

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 변수를 선언 할 것입니다

그들 중 개별적으로.

+0

이제 변수를 저장하고 저장 프로 시저를 살펴보고 매개 변수를 전달하므로 SQL을 전혀 편집 할 필요가 없습니다. EXEC YourQueryProcedure 2012010120120131' –

답변

6

매우 가깝습니다. 구문을 조금만 정리하면됩니다. 변수는 "@"기호와 데이터 유형으로 선언됩니다. 그것은 자정의 시간에 각 날짜 기본값 이후 혼란 스러울 수, 날짜 테스트를 BETWEEN 사용할 때 보조 노트로

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' 

을 : 그것은 더 나은, IMHO는 어느 날하여 종료 날짜를 해주와 같이 테스트하여 여기에 명시합니다 SQL Server 2008 이상)

+4

SQL Server를 가정하면, 이것은 단지 2008+에서만 작동합니다. 그렇지 않으면 선언을하고 별도의 줄에 설정해야합니다 (Joe처럼). 나는 다른 버전의 SQL에 대해서 말할 수 없다. –