[SQL] 저장 프로 시저에서 SQL 서버 변수 범위
SQL저장 프로 시저에서 SQL 서버 변수 범위
나는 SQL 서버 저장 프로 시저의 경우 / 다른 문 내에서 변수를 선언하고 싶습니다. 나는 SQL 서버 프로 시저 내에서 변수 선언에 대한 메모리 관리를하지 않기 때문에이 매우 불가능하다는 것을 알고 있습니다. 는 IF / else 문에서 범위 변수를 가질 수있는 방법이 있나요, 다음 다른 경우 / 다른 성명에서 동일한 이름의 변수를 재 선언? 예를 들면 :
create procedure Foo
as
begin
if exists (x)
begin
declare @bob int
set bob = 1
end
else
begin
declare @bob int
set bob = 2
end
end
해결법
-
==============================
1.온라인 책에서 :
온라인 책에서 :
하나. 아무것도이 일에서 당신을 유지하지 :
create procedure Foo as begin declare @bob int if exists (x) begin set @bob = 1 end else begin set @bob = 2 end end
-
==============================
2.아니, SQL 꽤 재미 / 그런 이상한
아니, SQL 꽤 재미 / 그런 이상한
코드의 블록을 존재하는 경우 전에 변수를 선언
그래서
declare @bob int set @bob = 2 if exists(x) begin set @bob = 1 end
이제, 이러한 예를 살펴보고 무슨 생각하려고
WHILE 1 = 2 --not true of course BEGIN DECLARE @VAR INT; END SET @VAR = 1; SELECT @VAR;
물론이 작동하지만,이 때마다 초기화되지 않습니다
DECLARE @loop INT SET @loop = 0 WHILE @loop <=6 BEGIN DECLARE @VAR INT SET @VAR = COALESCE(@VAR,0) + 1 SET @loop = @loop +1 END SELECT @VAR
-
==============================
3.당신이 할 수없는 이유를 몇 가지 이유가있다 :
당신이 할 수없는 이유를 몇 가지 이유가있다 :
declare @bob int if exists(x) begin set @bob = 1 end else begin set @bob = 2 end
-
==============================
4.당신은 동적 SQL을 사용하여에 의존 수 :
당신은 동적 SQL을 사용하여에 의존 수 :
if exists (x) begin exec sp_executesql N' declare @bob int set @bob = 1 '; end else begin exec sp_executesql N' declare @bob int set @bob = 2 '; end
from https://stackoverflow.com/questions/5994957/sql-server-variable-scope-in-a-stored-procedure by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL Server를 사용하여 소프트웨어 버전을 비교? (0) | 2020.06.11 |
---|---|
[SQL] 최대 절전 모드 기준 API : GET n은 임의 행 (0) | 2020.06.11 |
[SQL] SQL 서버, 할 수없는 기본 키 필드에 널 (null)입니까? (0) | 2020.06.11 |
[SQL] 나는 MySQL은 날짜에서 월 얻는 방법 (0) | 2020.06.11 |
[SQL] 어떻게하는 SqlCommand에 설정된 격리 수준에 /도록 SqlConnection은, 트랜잭션 (transaction)로 초기화 (0) | 2020.06.11 |