강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

SQL Server에서 글로벌 변수 구현하기
작성자 : 99 단국강토
등록날짜 : 2008.12.30 16:58
4,962

SQL Server에서 글로벌 변수(Global Variable) 구현하기

<?XML:NAMESPACE PREFIX = O />

 

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

블로그에 재미있는 주제와 관련된 글이 올라와서 이를 활용해서 소개해 드립니다.

#TempTable 과 같이 테이블 명 앞에 #을 붙이게 되면 이 테이블의 정보는 현재 세션에서 계속 사용할 수 있습니다.

이와 비슷한 방식으로 저장 프로시저 또는 쿼리를 작성하다 보면 값이 저장된 변수를 재정의하지 않고 지속적으로 사용해야 할 경우가 종종 있습니다. 하지만, SQL에서 변수는 하나의 일괄 처리 내에서만 사용 가능합니다. 동일한 세션에서 정의되고 값이 지정되더라도 “GO”로 일괄 처리가 끝나게 되면 다시 변수를 정의해야 하며, 이미 지정한 값은 사라지게 됩니다.

DECLARE @GlobalVar int

SET @GlobalVar = 10

 

SELECT @GlobalVar

GO

 

SELECT @GlobalVar+1

GO

 

/*

-----------

10

(1 적용됨)

 

메시지 137, 수준15, 상태 2, 2

스칼라 변수"@GlobalVar"() 선언해야 합니다.

*/

두 번째 SELECT 문에서 @GlobalVar 변수를 사용하려고 하지만, 이미 변수가 정의된 후, GO로 일괄처리가 끝났기 때문에 더 이상 @GlobalVar 변수는 존재하지 않으며 위와 같이 에러가 발생합니다.

 

현재의 세션에서 값을 유지하기 위한 방법으로 CONTEXT_INFO라는 기능을 이용할 수 있습니다. CONTEXT_INFO는 세션 별로 varbinary(128)의 값을 저장할 수 있는 기능이며, 세션 당 한 개가 존재합니다. SQL 2005에서는 sys.dm_exec_sessions, SQL 2000에서는 master.dbo.sysprocesses 테이블에서 CONTEXT_INFO 값을 확인할 수 있으며, 쿼리에서는 CONTEXT_INFO()로 값을 읽어올 수 있습니다.

 

) CONTEXT_INFO를 사용하여 값 저장하기 구현

-----------------------------------------------------------------------

-- 1) <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><?XML:NAMESPACE PREFIX = ST1 /><?xml:namespace prefix = st2 ns = "urn:schemas:contacts" /><?XML:NAMESPACE PREFIX = ST2 />자형 값을 저장

-----------------------------------------------------------------------

DECLARE @BinVar as varbinary(128)

SET @BinVar = CAST('ABCDEFG' AS VARBINARY(128))

SET CONTEXT_INFO @BinVar

GO

 

SELECT session_id, context_info FROM sys.dm_exec_sessions

WHERE session_id = @@spid

GO

/*

session_id context_info

---------- ------------------

51           0x41424344454647

*/

 

 

SELECT CAST(CONTEXT_INFO() AS CHAR)

GO

SELECT CAST(CONTEXT_INFO() AS CHAR)

GO

/*

------------------------------

ABCDEFG                      

 

------------------------------

ABCDEFG                       

*/

 

 

-----------------------------------------------------------------------

-- 2) 숫자형 값을 저장 (숫자를 문자형으로 변환한 , 저장)

-----------------------------------------------------------------------

DECLARE @BinVar as varbinary(128)

SET @BinVar = CAST(CAST(123456 AS CHAR) AS VARBINARY(128))

SET CONTEXT_INFO @BinVar

GO

 

SELECT CAST(CAST(CONTEXT_INFO() AS CHAR) AS INT)

GO

SELECT CAST(CAST(CONTEXT_INFO() AS CHAR) AS INT) + 100000

GO

 

/*

123456

 

223456

*/

 

CONTEXT_INFO를 이용하는 방식이 간단하기는 하지만, 다음과 같은 한계가 있습니다.

A.      세션당 한 개만 사용할 수 있음

B.      VARBINARY(128) 데이터만 저장 가능. 다른 유형의 데이터는 변형해야 함

 

 

다음에 소개되는 스크립트는 이러한 점을 해결할 수 있는 방식입니다. 테이블과 이 테이블에 데이터를 입력하고 출력하는 저장 프로시저를 이용하는 방식입니다.

USE master

GO

 

IF OBJECT_ID('dbo.sp_GlobalVariables') IS NOT NULL

    DROP TABLE dbo.sp_GlobalVariables

GO

CREATE TABLE dbo.sp_GlobalVariables

(

    varName VARCHAR(100),

    varValue SQL_VARIANT

)

GO

 

IF OBJECT_ID('dbo.sp_GetGlobalVariableValue') IS NOT NULL

    DROP PROC dbo.sp_GetGlobalVariableValue

GO

CREATE PROC dbo.sp_GetGlobalVariableValue

(

    @varName VARCHAR(100),

    @varValue SQL_VARIANT = NULL OUTPUT

)

AS

    SET NOCOUNT ON   

    -- 출력 변수 설정

    SELECT    @varValue = varValue

    FROM    sp_globalVariables

    WHERE    varName = @varName

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
3255 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 5324
3254 팝업창 닫고 프레임이 있는 부모창에서 원하는 페이지로 이동하기 M 최고의하루 12.23 5286
3253 frame, iframe에서 쿠키, 세션 인증(로그인) 처리 안 될 때 해결 방법 13 김영철 01.14 5233
3252 이더넷의 원리 살짝 맛보기 M 최고의하루 12.18 5231
3251 [펌] 제12강 - 방명록 만들기 I M 최고의하루 12.23 5104
3250 [MSSQL] 그룹별 상위 n명 가져오기 예제 13 김영철 01.23 5056
3249 Eclipse에서 ASP 개발하기 M 최고의하루 12.04 5030
3248 XP 네트워크 공유 설정 99 단국강토 01.06 5013
3247 PC 메인보드 콘덴서 교체하기 M 최고의하루 12.18 4986
열람중 SQL Server에서 글로벌 변수 구현하기 99 단국강토 12.30 4963
3245 대량 메일 발송 소스 (PHP 강좌/PHP 사용팁) 13 김영철 01.13 4950
3244 공유기 차단 무력화 시키는 법 99 단국강토 01.13 4943
3243 무료 네비게이션 프로그램 (PC버전) 댓글3 17 vane 12.27 4936
3242 한글 영문변환 참고 문자표 2 아론k 06.24 4918
3241 root에서 mysql db가 안보일때 13 김영철 01.29 4917
3240 내장 그래픽카드 죽이는 법 M 최고의하루 12.04 4875
3239 PC Alarm - 알람 프로그램 댓글1 M 최고의하루 12.04 4852
3238 AJAX 강의 2장 - XMLHttpRequest 오브젝트 사용하기 13 김영철 01.29 4839
3237 html - 테이블에 점선 넣기, 테이블 점선만들기 99 단국강토 02.05 4833
3236 mssql mysql 변환, asp 게시판 소스 수정 13 김영철 01.29 4832
3235 ★★★셀렉트박스 테두리 없애기 99 단국강토 02.04 4829
3234 CSS 사용방법 - 폰트표현 99 단국강토 02.19 4761
3233 데이터베이스의 저장 프로시저를 자동으로 생성 M 최고의하루 12.24 4761
3232 벅스뮤직에 있는 음악 오디오 시디로 만들기 99 단국강토 01.05 4739
3231 mysql함수 [숫자열, 문자열, 집계, 날짜, 기타함수...] 99 단국강토 01.07 4735
3230 윈도우에 설치된 오라클9i 삭제하기 13 김영철 01.29 4621
3229 [ ASP ] 배열 ( Array ) 과 Scripting.Dictionary M 최고의하루 12.20 4620
3228 utf-8 세팅및 한글깨짐방지 M 최고의하루 12.23 4614
3227 [mssql]성능 측정을 위한 설정 13 김영철 01.23 4599
3226 [펌] 제13강 - 방명록 만들기 II M 최고의하루 12.20 4524
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취