2012-12-20 4 views
1

를 선언해야이 내 SQL 코드입니다 -는 스칼라 변수 "@maxprice"

declare @maxprice int --1 
set @maxprice = 1000 --2 
select @maxprice --3 

내가 1, 2, 1,2,3 오류없이 이러한 조합을 실행할 수 있습니다. 하지만, 처음 1,2시 ​​실행하면, 내가 언급 한 오류가 발생합니다.

왜 이러한 일이 발생하는지 이해할 수 없습니다. select @maxprice가 일반 select 문과 유사해야합니까?

+0

실행이 완료되면 선언 한 모든 변수가 플러시되고 세 번째 명령문 만 실행하면'@maxprice'라는 선언이 없습니다. –

+0

@AdeelAhmed - 초보자입니다. 나는 지금 모든 것을 모릅니다. 어디에서 배울 수 있습니까? –

답변

2

이러한 SQL 문은 블록으로 실행되며 명령과 정의는 블록 내에서만 유효합니다. 블록이 끝나자 마자 선언 된 변수는 범위를 벗어나 정의되지 않습니다.

그래서 3 행만 실행하면 SQL 서버는 이전에 동일한 변수로 작업을 수행했는지 여부를 알지 못하거나 실제로 변수가 정의되지 않았다고 불평합니다.

변수가 선언 된 후에 (예 : 세션 기간 동안) 변수가 범위에 남아 있으면 시스템은 예를 들어 @maxpriceint으로 선언 될 때 충돌을 해결해야합니다. 하나의 절차, 다른 유형의 money 유형이 있습니다.

SQL Server의 변수 및 범위 지정 규칙에 대한 자세한 설명은 here입니다.

+0

이것이 당신이 의도 한 것입니까? int로 선언하고 선택하고 돈으로 되풀이 하시겠습니까? 그렇다면 선언 된 변수가 범위 내에 남아 있으면 문제가 없어야합니다. 그것을 다시 선언하면 이전의 범위를 죽일 수도/죽일 수도 있습니다. –

+0

나는 그것을 할 수 없다는 것을 말하지 않고있다. 나는 SQL 서버에서 그렇게하지 않았다고 말하고 있는데, 그렇게 유용하지 않은 기능에 대해 가능한 부작용이 너무 많다는 이유가 있다고 생각한다. . – SWeko

+0

변수를 선언하는 코드가 있습니다. 범위가 끝나는 곳을 어떻게 알 수 있습니까? 또한 "영구적 인"변수를 만드는 방법이 있습니까? 즉 범위가 영원합니다. –