본문 바로가기

MS-SQL

MSSQL 일련번호는 시퀀스(Sequence)를 사용하자. MSSQL2012 부터 시퀀스(Sequence)를 지원하게 되었습니다. 일반적으로 숫자로 된 일련번호를 생성할 때 쉽게 생각해 볼 수 있는 방법은 테이블에서 가장 큰 수를 가져와 +1 하는 것일 것입니다. 쿼리로 보자면 다음과 같습니다. SELECT MAX(Seq) + 1 FROM Table 이 방법은 사용자가 1명일 경우는 문제가 없겠지만 다수의 사용자가 번호를 따는 상황이라면 중복이 발생할 수 있습니다. 즉, 이러한 방식의 번호따기는 언제든 문제가 발생할수 있다는 것이죠. 이 때 사용할 수 있는 기능이 시퀀스(Sequence)입니다. 시퀀스를 사용하면 프라이머리 키로 사용할 수 있는 유니크한 자동 증가번호를 딸 수있습니다. 1. 시퀀스의 생성 2. 옵션 설명 시작값 : 1 (번호가 1부터 시작) 증가.. 더보기
MSSQL 프로시저 텍스트 검색 프로젝트 중에 테이블 이름이 바뀌는 경우가 있다고 가정합시다. 그럼 기존에 작성된 프로시저나 사용자 정의함수 중에 변경될 테이블명이 사용된 것들을 찾으려는 경우 어떻게 해야 할까요? 모든 프로시저를 다 까보고 전수검사 하겠다는 다짐하시는건 아니겠죠? 다음과 같은 쿼리로 한번에 어떤 프로시저에 텍스트가 포함되어 있는지 검색을 할 수있습니다. 검색쿼리(Stored Procedure Text Search) SELECT xtype, name, text FROM syscomments COM JOIN sysobjects OBJ ON COM.id = OBJ.id WHERE OBJ.xtype='P' AND COM.text LIKE '%텍스트%' 위에 텍스트 부분에 찾으려는 테이블명, 함수명 등을 넣으시면 됩니다. XT.. 더보기
MSSQL 날짜 변환, CONVERT()함수의 활용 이번 글에서는 CONVERT함수를 활용한 MSSQL 날짜 변환에 대해 알아보겠습니다. 프로젝트를 수행하다 보면 날짜정보를 많이 다루게 되는데요, 국내에서는 대부분 yyyymmdd 또는 yyyy-mm-dd 형식으로 날짜를 관리합니다. GETDATE함수로 MSSQL서버의 현재시간을 가져오면 yyyy-mm-dd hh:mm:ss 형식인데요, 각 스타일 번호별로 리턴형식이 어떻게 변하는지 다음 표에서 확인하시기 바랍니다. 1. CONVERT()함수의 스타일 번호별 날짜 변환 형식 쿼리 스타일번호 출력결과 비고 SELECT CONVERT(nvarchar(50), GETDATE(), 1) 1 01/20/19 mm/dd/yy SELECT CONVERT(nvarchar(50), GETDATE(), 101) 101 01/.. 더보기
MSSQL 게시판 글번호 매기기 관련글 : 2019/01/17 - [MS-SQL] - MSSQL 그룹별 최상위 데이터 가져오기 게시판 글번호 매기는 방법(최신글이 앞에 나오게)에 대해 알아보겠습니다. 간단한 건데, ROW_NUMBER() 함수를 이용합니다. ----------------------- -- 예제 테이블 생성 ----------------------- CREATE TABLE [dbo].[Board]( [Idx] [int] IDENTITY(1,1) NOT NULL, [Writer] [nvarchar](50) NULL, [Subject] [nvarchar](100) NULL, [WriteTime] [datetime] NULL, [Contents] [nvarchar](1000) NULL, CONSTRAINT [PK_Board] .. 더보기
MSSQL 버전확인 SQL Server버전확인 쿼리는 다음과 같습니다. SELECT @@VERSION AS 'SQL Server Version'; 함수 등 서버 버전에 따라 지원여부 확인을 위해 필요합니다. 프로젝트의 성공을 기원합니다. 더보기
MSSQL 초간단 팁들 MS-SQL 쿼리작성시 정말 간단한 팁들 datetime 타입 필드를 varchar(10)와 비교하기 Sales라는 테이블에 WriteDate 필드가 datetime형식일 때 varhcar(10)형식의 날짜와 비교를 어떻게 하는가? DECLARE @DateFrom varchar(10) SET @DateFrom = '2019-02-02' DECLARE @DateTo varchar(10) SET @DateTo = '2019-02-02' SELECT * FROM Sales WHERE WriteDate @DateFrom AND @DateTo +' 23:59:59.999' 더보기
MSSQL 그룹별 최상위 데이터 가져오기 그룹별 최상위 데이터 가져오기 MSSQL에서 그룹별 최상위 데이터를 가져오는 방법은 JOIN을 이용한 방법, 서브쿼리를 이용한 방법 등 여러가지를 생각해볼 수 있겠습니다만, 여기서는 제가 가장 간단하고 이해하기 쉽다고 생각하는 순위함수와 OVER절을 이용한 방법에 대해 설명하겠습니다. 학습에 이용할 테이블과 데이터는 다음과 같습니다. SELECT Name, Month, SellCount FROM MonthlySales 테이블 전체 데이터 조회결과 최종목표/결과쿼리먼저 최종적인 쿼리를 보여드리고 단계적으로 설명하도록 하겠습니다. 위의 테이블 데이터에서 각 과일명 별로 판매량이 제일 많은 달의 로우만 가져오는 쿼리입니다.SELECT * FROM ( SELECT Name , Month , SellCount ,.. 더보기
트리구조(Tree Structure)란? 트리구조란?(Tree Structure) 각 요소가 바로 아래에 있는 하나 이상의 요소에 연결되는 데이터 구조 유형입니다.1개 이상의 노드를 갖는 노드들의 집합요소 간의 연결을 말하며, 데이터 구조에서 다루는 트리는 일반적으로 꼭대기에 뿌리가 그려져 있으므로 거꾸로 된 트리 라고도 합니다. 소프트웨어 개발을 하면서 자연스레 공부하게 되는 데이터에는 큐(Queue), 버퍼(Buffer), 트리(Tree)등이 있습니다. 큐나 버퍼는 주로 메모리 상에서 관리되는 자료구조의 개념이기 때문에 어렵기도 하고 잘 모르지만, 트리구조는 사용자에게 보여지는 용도로도 많이 쓰이는 개념이어서 사용하는 경우가 많습니다. 그런 만큼 공부가 필요하겠죠?트리구조는 우리 주위에서 쉽게 접할수 있습니다. 예를 들자면 월드컵 토너먼트 .. 더보기
MSSQL 특정노드의 하위노드 전체 가져오기(Top Down) 조직도에서 하위조직 모두 가져오기 오늘 함께 알아볼 과제는 "특정노드의 하위노드 전체를 가져오는 탑다운(Top Down) 방식의 함수 만들기" 입니다. 특정조직코드를 넘기면 그 조직을 포함한 하위조직 모두를 테이블형태로 넘기는 사용자 정의함수를 만들도록 하겠습니다. 다음의 예제를 통해 알아보죠. 국내 굴지의 대기업 사성전자는 다음과 같은 조직도를 가지고 있습니다. 앞의 글에서 회사의 조직도는 트리구조를 가지고 있다고 했습니다. "회사"를 루트로 자식노드들이 나무의 가지와 같이 뻗어 있는 형태죠. 그림1. 사성전자의 조직도이와 같은 트리구조를 구현하려면 테이블에 다음과 같이 데이터를 구성해야 합니다. 트리구조의 조직도 데이터는 루트노드(사성전자, 10000)와 이 루트노드를 부모노드로 하는 자식노드들로 구.. 더보기
MSSQL 특정노드의 상위노드 전체 가져오기(Bottom Up) 조직도에서 상위조직 모두 가져오기 지난글에서는 조직도 데이터에서 특정노드의 하위데이터 전체를 가져오는 함수를 만들어봤습니다. 이번글 에서는 Top Down함수의 반대되는 개념으로 "특정노드의 상위노드 전체 가져오기(Bottom Up)함수"를 작성해 보겠습니다. 사용될 테이블 및 데이터는 지난 특정노드의 하위노드 전체 가져오기(Top Down) 글을 참고하시기 바랍니다. 테이블 반환 사용자 정의 함수 만들기 여기서는 조직코드를 파라메터로 넘기면 그 조직을 포함한 하위조직 전부를 반환하는 테이블 함수입니다. Bottom Up함수도 Top Down과 유사하게 WITH CTE(Common Table Expression)의 재귀공통 테이블식을 사용하여 구현할 수 있습니다.SET ANSI_NULLS ON GO SE.. 더보기