WITH 재귀 CTE (2) Bottom-Top 역방향
·
DB/SQLServer
기존 메뉴 CTE를 조금 응용해 보자면1. Bottom-Top (역방향) 으로 부서를 찾는다.2. 메뉴처럼 전체를 찾는 것이 아닌 연관성 있는 조건 값을 받아 기준점으로 시작한다.3. 나신입 이라는 백앤드팀 사원이 부장 -> 이사 -> 상무 -> 대표 형태로 역으로 나랑 연관된 조직을거꾸로 찾아 올라가는 방식이다. A. 데이터 준비 1. 테이블-- 1. 부서 테이블 (계층 구조만 담당)CREATE TABLE Tbl_Dept ( DeptCode INT PRIMARY KEY, ParentDeptCode INT NULL, DeptName NVARCHAR(50));-- 2. 사원 테이블 (소속 부서 + 결재권자 여부 포함)CREATE TABLE Tbl_Employee ( EmpID IN..
WITH 재귀 CTE (1) Top-Down 기본 재귀
·
DB/SQLServer
트리구조의 데이터를 만들때 재귀CTE를 사용하게 된다.즉 자신을 반복하여 쿼리하는 것 이다.그룹웨어 시스템의 메뉴 표현하는것을 예제로 재귀 CTE 를 설명한다테이블은 1개인데 재귀 도는 구조이다.A. 준비작업 이 메뉴는 3뎁스 구조이다. 1. 테이블 생성-- 기존 테이블이 있다면 삭제DROP TABLE IF EXISTS Tbl_Menu;-- 메뉴 테이블 생성CREATE TABLE Tbl_Menu ( NodeID INT PRIMARY KEY, -- 메뉴 고유 ID (PK) ParentNodeID INT NULL, -- 상위 메뉴 ID (Root는 NULL) MenuName NVARCHAR(100) NOT NULL, -- 메뉴명 LinkUrl NVAR..
SSMS에서 쿼리 바로가기 (3) 문자열 만능 검색
·
DB/SQLServer
https://iyak.tistory.com/entry/DB%EB%82%B4-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80%ED%95%A8%EC%88%98%EB%B7%B0-%EB%82%B4-%EC%86%8D%ED%95%B4%EC%9E%88%EB%8A%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EA%B2%80%EC%83%88 (개선판) DB내 프로시저/함수/뷰 내 속해있는 문자열 검색출처 : https://stackoverflow.com/questions/14704105/search-text-in-stored-procedure-in-sql-server 디버깅을 위해 프로시저 내에서 문자열을 주로 테이블명을 기준으로 문자열을 찾게 되는데간간히 사용하다 보니 이iyak.tis..
SSMS에서 쿼리 바로가기 (2) 테이블정보 확장 프로시저
·
DB/SQLServer
어떤 프로젝트에서 보고 배울만한 실력자들의 팁들이 제법 있었는데쿼리 바로가기를 커스터마이징을 하여 사용하고 있었다.2편에서 다루는 내용은 쿼리바로가기의 SELECT TOP 1000 * FROM 을 이 프로시저로 변경하는 것 이다.아래 포스트의 SELECT TOP 1000 * FROM 대신 작성된 프로시저로 변경 1. 기존 방식의 한계SSMS 기본 기능이나 단순 쿼리로는 채워지지 않는 부분에 대해 아쉬움이 있음불안함: 운영 DB에서 SELECT * 날릴 때 혹시 Lock 걸릴까 봐 매번 WITH (NOLOCK) 치기 귀찮음.부족함: 데이터(SELECT)를 보면 컬럼 타입이 안 보이고, 구조(sp_help)를 보면 데이터가 안 보임.번거로움: INSERT 문 하나 짜려 해도 컬럼명 일일이 나열하거나, 변수..
SSMS에서 쿼리 바로가기 (1) 기본 사용방법
·
DB/SQLServer
SSMS 에서는 키보드 단축키 중에 쿼리 바로 가기를 제공해주는데 SSMS 툴 사용을 많이 해보지 않은 사용자들은 이 기능을 모르는 경우가 많다. 실무에서 쿼리 수정 등의 디버깅을 힐때 SELECT * FROM TABLE 를 많이 하게 되는데이를 일일히 타이핑하는 경우가 많더라좌측메뉴의 테이블 리스트가 아닌 아닌 프로시저이 일때 그런 경우가 있다.MSSQL 에서는 프로시저를 열어서 볼때 본문에 테이블이름이 DOG 라는 테이블 구문이 있으면DOG 를 드래그한 다음 단축키를 실행하면 지정해둔 쿼리 구문이 실행된다.1. 쿼리 바로가기 설정 접근이 기능은 옵션 깊숙한 곳에 숨어 있어 모르는 사람이 꽤 많음.상단 메뉴 [도구(Tools)] > [옵션(Options)] 클릭좌측 트리에서 [환경(Environme..
CHAR 컬럼과 접두어를 활용한 자동 채번(Key) 생성
·
DB/SQLServer
사용자번호 같은 사용자 고유키 BIGINT 형태의 IDENITIY 형식으로 작성할 수 있다.이게 가장 일반적인 방식이지만. 이런 경우에는 각종 관계를 가진 테이블이 많을 때 10005 라는 값이 어느테이블의 키인지직관적으로 알아보기 힘든 경우가 있다.이런 부분들에 대해서 일부 일련번호를 고정형 CHAR 테이블에 접두어를 붙이고 채번을 하는 방식을 사용하는경우가 있다. 이는 접두어의 직관성이나 접두어 + 날자 등을 섞어 직관적으로 보는 장점이 있으며 CHAR 형태의 고정된 형태의 자료형에서 성능 최적화의 이점도 누릴 수 있다.이는 고전적인 방식으로 실무에서도 오래전부터 많이 사용해 왔었다.다만 실무에서 이런 패턴들을 봤을 때, 범용적인 프로시저가 아닌 좀 하드코딩 스러운 부분들이 많아범용 프로시저화 시켜..
(개선) 테이블 및 컬럼 설명 추가/수정/조회/삭제 통합
·
DB/SQLServer
동일한 내용 개선 버전 (프로시저 이름과 사용법이 다르며, 컬럼 테이블정보 출력 방식 개선) A. 개선된 프로시저- 사용법은 아래 주석의 [사용규칙] 참고- ex) . 으로 구분 '테이블.컬럼' 'Member' , '사용자테이블' 'Member.UserID' , '로그인아이디'/* ============================================================================ [테이블/컬럼 주석 통합 관리 도구] [사용 규칙] 1. 조회 (View): 두 번째 파라미터 생략 (NULL) - EXEC sp_doc 'Table' -> [결과1] 테이블 설명 / [결과..
엑셀파일을 =CONCATNATE() 함수를 통해 밀어 넣기
·
DB/SQLServer
몇년전에 핸드폰 메모장에 적어놨던 것을 우연하게 찾아서 포스팅 함운영업무를 하다보면 현업에서 엑셀파일을 던져주며 일괄로 등록해 달라고 요청할때가 있다.이때 대략 두가지 방법 중 하나룰 선택하여 밀어넣게 되는데 하나는 엑셀데이터가 방대할때 SQL에서 제공하는 벌크카피를 이용하는 것이고두번째 방법은 적당한 10 ~ 수백건 정도는 엑셀파일에 함수 수식을 붙여 쿼리문을 만드는방법을 택할 수 있다.이 중 두번째 방법에 대해 설명한다. https://support.microsoft.com/ko-kr/office/concatenate-%ED%95%A8%EC%88%98-8f8ae884-2ca8-4f7a-b093-75d702bea31d 1. 이런 데이터를 받았다고 가정한다.진짜 넣어야 할 데이터는 A2 부터 B2 , C..