select 된 내용을 테이블에 담아보자


프로시저 작업시 디버깅 방법으로 많이 사용하는게 바로
select into 쿼리 일 것이다. 조회된 데이터를 그대로 테이블에 
담아 사용 하는 방법이다.

그래서 방법은 아주 간단하다. select 문에 INTO {테이블명} 을 입력하면 된다.
예제는 아래와 같다.




SELECT INTO NEW_TABLE
FROM Member

▼아래처럼 실행해보면 같다. 실행이 된다.


▼Member의 데이터가 그대로 NEW_TABEL에 insert 되었다.
 개발시에 꽤 쓸모 있는 방법이니 알아두자




마무리

요즘 mssql 쓰는 회사가 왜케 없나요^^



댓글을 달아 주세요



MSSQL while문 예제 

오늘은 한번 while 예제릴 간단하게 작성해보았다. 
MSSQL하면 프로시져를 간단하고 가볍게 개발 할 수 있는게 최대 장점일 것 이다.
그 중에 while문은 실무에서 가장 애용 하는 방법중 하나이다.

▼그래서 익스프레스하게 아주 간단하게 작성해보았다.

DECLARE @IDX INT           /* 변수를 선언한다. */
SET @IDX=1                 /* 1를 집어넣었다 */         
                               
WHILE @IDX <= 10           /* while을 10번 돌릴려고 한다. */
BEGIN
                                                                             
     PRINT @IDX           /* 값을 찍어보자. */
     SET @IDX= @IDX+1     /* 그리고 IDX를 +1 시켜주자  */
                                           
END




▼결과화면은 아래와 같다. 

mssql 쿼리창mssql 쿼리창


예제는 매우 쉽다.
단지 저 예제 안에 while문 안에
얼마나 로직을 잘 담는게 문제일 것 이다.




마무리

MSSQL 프로시져 개발이 개인적으로 가장 재미 있었던 프로젝트 였습니다.



댓글을 달아 주세요



정렬을 동적으로 바꾸기 


MS도구 들이 언어들이 모드 그렇지만 편의성을 많이 제공한다.
이게 장점일수도 단점일수도 있지만.
(요즘 들어 단점이라 생각이 든다.)
하여튼 MSSQL 은 참 편리하다. 프로시져 개발하기 가장 좋은 매니저먼트를 제공하기 때문에
인풋과 아웃풋만 정해주면 자유롭게 프로시져 안에서 로직을 구현할수 있다.

그중에 가장 많이 쓰는 방법인 CASE를 활용해 정렬을 바꾸어 보려고 한다.
하지만 이 방법은 성능적으론 추천하지 못한다.
조금 간단하고 데이터가 적은 로직에 쓰길 바란다.
(참고로 CASE를 이용한 조건절 바꾸기는 타 DB에도 쓸수 있다.)



아래 쿼리를 확인해보자
Order by 안에 CASE를 활용 하여 IF를 걸었다.
그리고 해당 값일 경우 컬럼의 정렬을 바꾼다


BEGIN
DECLARE @ORDERBY VARCHAR(50)
SET @ORDERBY = 'phone'
                                           
SELECT * FROM Board
     Order By case when @ORDERBY = 'name' then name end desc,
     case when @ORDERBY = 'phone' then phone   end asc
                                                                                           
END


위 쿼리를 확인해보자
Order bt 안에 CASE를 활용 하여 IF를 걸었다.
그리고 해당 값일 경우 컬럼의 정렬을 바꾼다.

외부에서 ORDERBY에 값만 담아주면 프로시져에서 해당과 같이
기획자가 새로운 정렬을 요구한다면 그저 
HTML에 SELCT 박스만 추가해주면 되고
프로시져에
  case when @ORDERBY = 'addr' then phone   end asc
이런식으로 한줄만 추가하면 된다.





마무리

CASE를 잘쓰면 가독성이 높아집니다.

그리고 성능은 떨어집니다.

그럼 뭐가 답이냐고요? 잘 조절하여 쓰면 됩니다.

댓글을 달아 주세요




MSSQL 에서 음수 양수를 구별하기


프로시져를 만들다 보면 결과값이 음수 혹은 양수일지 구별해야 하는 경우가 생긴다
(상당히 자주 존재한다)

그래서 오늘은 mssql 에서 음수 양수를 구분하는 방법을 알아보자
방법은 간단하다. sign 함수를 이용하면 된다

아래 쿼리를 실행해보자

select sign(-1
select sign(0)



▼아래처럼 숫자 크기와 상관없이 결과값을 도출한다. 





마무리

개발도 재밌지만 정리하는 재미도 즐겁습니다.

댓글을 달아 주세요



MSSQL 0을 Null로 반환하여 isnull로 처리하기


MSSQL 에서 0으로 나눌시에는 오류가 발생한다. 0으로 숫자를 나눈건 로직이 잘못됐거나 모델링 잘못된 것이다.
하지만 .. 사람 맘 같이 세상이 움직이겠는가..
결국은 숫자가 꼬이고 꼬이면 0으로 나누고 결국 오류가 발생할것이다.
오늘은 그래서 MSSQL에서 0으로 나누기 오류를 대비하는 법을 배워보겠다.

우선 아래처럼 쿼리를 MSSQL매니저먼트에서 실행해보자
 SELECT 1000 / 0   



▼ 당연히 오류가 발생하였다. 수학에선 0으로 숫자를 나눌수 없다. 



이번엔 이 쿼리를 실행해보자
SET ANSI_WARNINGS OFF
SET ARITHIGNORE ON
SET ARITHABORT OFF
select 100 / 0

▼ 아래처럼 NULL 이 반환 됐다. (오류만 발생안했을 뿐이지 결국 오류이지만)



해당 옵션과 함께 isnull을 사용하면
SET ANSI_WARNINGS OFF
SET ARITHIGNORE ON
SET ARITHABORT OFF
select ISNULL(100 / 0,0)

▼ 가장 올바른 값이 표출 되었다. 
오류를 피해갈 수 있었다가 맞겠네요






+고코더의 추천강의


프로시저에서 오류를 캐치하기 RAISERROR 예제를 배워보세요

-> http://gocoder.tistory.com/34?category=701232



마무리


0으로 숫자를 나누지 않게 프로시져를 개발 하는게 정답입니다.


댓글을 달아 주세요



MSSQL EXISTS 사용 방법


MSSQL 하면 프로시져 만들기 참 좋다.
MSSQL 매니지먼트 스튜디오가 편해서 그럴것이다.
실무에서 가장 많이 쓰고 헷갈리는 내장객체는
EXISTS 일것이다.
테이블을 검색해서 값이 있을때와 없을때를 구분한다.


IF EXISTS(
                SELECT * FROM 테이블
                WHERE ID = @ID
         )
    BEGIN    --//SELECT문의 결과값이 존재하면 진입
    END  
ELSE
    BEGIN    --//SELECT문의 결과값이 없을 경우에 진입
    END

그리고 반대로 하고 싶으면 NOT EXISTS 를 사용하면 된다.

IF NOT EXISTS(
                SELECT * FROM 테이블
                WHERE ID = @ID
         )
    BEGIN    --//SELECT문의 결과값이 없을 경우에 진입
    END  
ELSE
    BEGIN    --//SELECT문의 결과값이 존재하면 진입
    END


마무리

항상 철자 까먹는 함수가 EXISTS입니다. 
지금 쓰면서도 헷갈렸었네요 


댓글을 달아 주세요



MSSQL에서 RAISERROR 예제, 프로시저 오류 캐치하기


프로시져 오류시에 캐치할수 있는 방법이다.
현재 사용하는 프로시져 맨위와 아래에 입력하면 끝
성공과 실패 후에 액션도 만들어야겠죠?


DECLARE     @V_ERR                        INT
SET         @V_ERR                        = 0

BEGIN
-------------------------------------------------------------------
--///    프로시져 실행
-------------------------------------------------------------------     
END
SET @V_ERR = @@ERROR
IF  @V_ERR <> 0
BEGIN
RAISERROR('오류가 발생하였습니다.!!', 16, 1)
RETURN @V_ERR
END





마무리

오류가 발생시 에러 내역을 테이블에 기록 하게 프로시저를 작성 해보세요


댓글을 달아 주세요