MSSQL 저장 프로시저는 변경 이력 관리가 힘듭니다. 보통 테스트용 DB에서 테스트가 끝나면 실 DB로 옮기는 작업을 해야 하는데 버전 관리가 안 된다는 건 힘든 일이죠. 물론 툴이 있긴 합니다. ( 참고 : SQL Source Control, sourcegear - vault ) 무료 툴이 있는지는 모르겠습니다 ㅡ.-;;;;; 그런데 르매님이 만드신 트리거가 있습니다. (참고 : MS SQL/Sequel SAFE for MS-SQL - 르매의 SQL 이야기) 무료로 쓸 수 있고 편리성도 좋습니다 ㅎㅎㅎ 근데 각 잡고 쓸 때는 좋은데 가볍게 쓸 때는 손이 좀 갑니다. 마침 다른 분이 간단하게 쓸 때 사용하는 트리거를 공개하셨네요. ( 참고 : SQLER.com - SVN에서 소스를 관리 하듯이 저장 프..
이전 글에서 'Row_Number'를 이용하여 검색된 결과에 순서대로 번호를 부여한 후 이 번호를 기반으로 'bettwen'으로 필요한 범위를 잘라내는 방법을 설명하였습니다. 동적 코드 없이도 코드가 깔끔하지만 속도가 너무 안 났고 그 원인을 분석해보니 셀랙트 부분에 있는 'Case'문이 문제였습니다. (참고 : [MSSQL] MSSQL의 페이징 쿼리 고찰 - 1. Row_Number + bettwen) 이 문제를 해결할 수 있도록 튜닝해 봅시다. *글을 읽기전에 이전글( [MSSQL] MSSQL의 페이징 쿼리 고찰 - 0. 테스트 환경 만들기(클릭) )을 보고 오시는 것이 좋습니다.* 연관글 영역 1. 사용 방법 사용 방법은 다음과 같습니다. Select Row_Number() Over ( Order ..
동적쿼리를 덜 사용하기 위해서 이짓저짓하다 보면 끝 자락쯤에서 생기는 문제가 오더바이(Order by)절입니다. 오더바이절에서도 선택문을 제한적이지만 사용은 가능합니다.(몇 버전부터 가능한지는 모르겠습니다.) (참고 : MSDN - ORDER BY 절(Transact-SQL)) 연관글 영역 1. 사용 방법 사용 방법은 크게 2가지가 있습니다. 일반적인 케이스문처럼 사용하는 방법과 콤마(,)를 이용하여 여러 조건을 주는 것이죠. Declare @nOrderColumn int = 1; Select * From tb_BigData1 Order by (case @nOrderColumn when 1 Then Data1 when 2 Then Data2 when 3 Then Data3 when 4 Then Data4..
'Row_Number'를 이용하려면 'MSSQL 2005'이상에서 사용 가능한 방법입니다. 'Row_Number'를 이용하여 검색된 결과에 순서대로 번호를 부여한 후 이 번호를 기반으로 'bettwen'으로 필요한 범위를 잘라내는 방법입니다. 동적 쿼리를 전혀 사용하지 않아도 중복되는 코드 없이 깔끔하게 코드를 만들 수 있다는 장점이 있습니다. *글을 읽기전에 이전글( [MSSQL] MSSQL의 페이징 쿼리 고찰 - 0. 테스트 환경 만들기(클릭) )을 보고 오시는 것이 좋습니다.* 연관글 영역 1. 사용 방법 사용 방법은 다음과 같습니다. Select ( Row_Number() Over ( Order By [정렬 기준 컬럼] [정렬 방향] )) as [Row_Number()로 만든 순서 컬럼명], [출..
MSSQL에서 페이징 처리는 여러 가지로 귀찮습니다. MSSQL 2012버전부터는 어느 정도 간단하게 처리할 수 있도록 오프셋(OFFSET)을 지원하긴 하는데....성능이-_-; 어찌 됐건 예전에 만들어둔 페이징 쿼리가 너무 느려 이상해서 이것저것 테스트하다 보니 이 기회에 정리 좀 해야겠다 싶어 포스팅을 시작합니다. ㅎㅎㅎ MSSQL에서 사용할 수 있는 페이징 쿼리를 소개하고 속도, 유지 보수성 등의 몇 가지 중요하다고 생각되는 요소를 주관적으로 평가해보겠습니다. 연관글 영역 1. 테스트 DB 만들기 테스트를 위해 테스트용 DB를 만들겠습니다. 1-1. DB 생성 테스트용 DB의 이름은 'TestDB'입니다. 1-2. 테이블 생성 테이블은 2개를 생성합니다. SET ANSI_NULLS ON GO SET..
별생각없이 Select TOP @nTemp From @table; 이렇게 작성 했더니 '[변수]'근처의 구문이 잘못되었습니다. 필요 REAL, INTEGER, NUMERIC 또는 '('. 이런 에러가 ㅡ,.ㅡ;; 에라이~ 1. 'TOP'에 변수를 사용할 수 있다.'TOP'에 변수를 사용할 수 있게 된것이 'MSSQL 2005'부터 입니다. 그래서 그런지 가끔 'TOP'에는 변수를 쓸 수 없다고 생각하는 사람들이 있습니다. 하지만 가능합니다! (참고 : MSDN - TOP(Transact-SQL)) MSDN에 보면 '2.TOP에 변수 사용'에서 변수를 소괄호(())로 감싸서 사용하는 것을 알수 있죠. 2. 'TOP'에 변수 사용하기그냥 괄호만 추가 하면 됩니다. Select TOP (@nTemp) From..
흠.... 간만에 서버에 MSSQL설치해야 해서 IDC센터에서 다해준다길례 해달라고 했습니다. 그런데..... 1.문제 'sa'계정으로 연결하려고 하니 앵? 윈도우 인증은 되는데 'SQL Server'인증이 안되는 겁니다 ㅡ,.ㅡ;;;;; 비밀번호를 내가 직접 넣었는데? 2. 해결 방법 로그인 안되는 것에 이유가 많습니다. 보통은 TCP가 허용됬는지 확인하고 방화벽을 열면되죠. 우리가 흔이 아는 이 내용은 물론 다 적용이 되어 있습니다. 보통 '윈도우 인증'은 되는데 'SQL 서버 인증'이 안된다면 원인은 한가지죠. 로그인의 '혼합 인증 모드'가 꺼저 있다는 것입니다!!!! 아..... 저는 MSSQL을 설치할때 혼합모드로 설정하고 설치하기 때문에 이런 문제를 볼 수 없던 것입니다-_-;; 다른 사람이 ..
데이터베이스는 버전 관리가 쉽지 않다는 문제가 있습니다. (물론 몇 가지 방법을 쓰면 불가능한 건 아닌데 일반적인 프로젝트 관리에 비하면....-_-;) 그래서 테스트DB와 실제DB와 차이가 크게 날 경우 저장 프로시저 같은 것들은 싹 날리고 생성하는 게 편합니다. 그 외에도 여러 가지 용도로 테이블이나 함수, 뷰 같은 것을 한 번에 지우기도 합니다. 1. 명령어 생성 저번 글에서 저장 프로시저나 테이블 같은 구성요소를 검색하는 방법을 알아봤습니다. (참고 : [MSSQL] MSSQL의 여러 구성요소 검색하기 - 'sys.objects') 검색 결과를 보면 이름이 출력되죠, 그러니 앞뒤로 쿼리를 붙여주면 우리가 원하는 동작을 하는 쿼리를 만들 수 있습니다. 예를 들면 테이블의 경우 'Drop Table'..
쿼리를 짜다 보면 셀랙트된 결과 테이블을 이용하여 저장 프로시저를 호출한다거나 각 데이터(Row)에 따른 다른 처리가 필요할 때가 있습니다. 예를 들면 '사원1'의 영업실적을 상위 상관들에게 누적하기 위한 저장 프로시저가 있다면 영업사원 숫자만큼 저장 프로시저를 호출해야 하죠. 이런 행단위 처리를 할 때 사용하는 것이 '커서(cursor)'입니다. (참고 : 커서(SQL Server Compact Edition)) 1. 커서의 이해 MSDN을 보면 눈이 돌아갈 정도입니다-_-;; 지금 당장 우리에게 필요한 건 단순히 "검색된 결과 테이블의 행만큼 저장 프로시저를 호출하고 싶다." 입니다. 커서는 이름처럼 데이터 자체를 조작하는 역활이 아닌 데이터의 위치를 알려주는 역활입니다. 그렇기 때문에 다음 칸의 데..
자주 있는 일은 아니지만 가끔 저장프로시저나 테이블 같은 것들을 쿼리로 파악해야 하는 경우가 있습니다. 보고서를 만든다거나 문서같은 것을 만들때 말이죠, 이때 사용하는 것이 'sys.objects'입니다. (참고 : MSDN - sys.objects(Transact-SQL)) 1. 'sys.objects' 사용하기 'sys.objects'를 테이블 처럼 이용하여 쿼리를 사용할 수 있습니다. Select name From sys.objects Where type = 'U' 이런 식으로 말이죠. 2. 'type' 종류 위에 코드에서 보시면 아시겠지만 이 코드에서 중요한건 'type'입니다, 이미 MSDN을 보셨다면 알고 계시겠죠? ㅎㅎㅎ 개체 유형: AF 집계 합수 (CLR) C CHECK 제약 조건 D D..