본문 바로가기

Database/MSSQL work

(47)
함수 변수를 받아 값을 리턴하는 함수 create function ufn_getAge(@bYear int) returns int as begin declare @age int set @age = year(GETDATE()) - @bYear return (@age) end go select dbo.ufn_getAge(1980) -- 위 내용을 테이블에 적용하기 select custId, custName, dbo.ufn_getAge(year(birthDate)) as[나이] from customersTbl -- table형태 반환하기 == inline table 반환하기 create function ufn_getVip(@amount int) returns table as return( select distinct..
커서 cursor 행을 가르키는것? 행의 집합정도 -- 선언, 오픈, 패치, (사용 후 ~ ) 클로즈/릴리즈(해제) 순서 커서의 내부 작동 방식 1. local, global 2. 원본 테이블을 DB에 복사해 놓을때, 어떻게 복사할지에대한 방법들 : static, keyset, dynamic, fast_foward : --static 커서에서 사용할 데이터를 모두 DB에 복사 한 후 사용하므로 원본테이블 값이 바뀌어도 원래값이 나온다. --keyset 1. 테이블에서 key값만 복사하여 메모리상에서 매번 원래 DB를 조회함. 따라서 update된 내용은 다 보이고 insert된 내용은 안보임 2. 유니크 제한조건이 걸려있지 않으면 보이지 않음(스테틱으로 자동변환됨) -- 동적(dynamic) 패치 될때마다 매번 키를 하나..
저장 프로시져 procedure 저장 프로시저란 DB를 다룰 때 사용하는 복잡한 쿼리문을 함수처럼 등록해두고 간단하게 사용할 수 있는 명령이다. 또한, 매개변수도 반영할 수 있기 때문에 편리하다. -- 저장 프로시저 특징 -- SQL Server 성능 향상 -- 최초 실행시 최적화 및 컴파일 과정 수행 수 캐시 메모리 적재 -- 재 실행시 캐시에서 호출 후 재사용 -- 유지관리 용이 -- 외부 응용프로그램에서 SQL문장을 직접 작성하지 않고 저장 프로시저 내에서만 유지 관리 -- 모듈식 프로그래밍 가능 -- 보안 강화 -- 네트워크 전송량 감소 -- 기본 생성 create procedure usp_members as select * from customersTbl; -- 실행(함수실행할때 쓰는 exec사용) exec usp_member..
트랜젝션(transaction) -- 하나의 db에서 이루어지는 논리적인 작업단위 -- MS는 오토커밋 시스템으로 oracle과 다르게 commit할 필요없고 Rollback()도 불가능 -- C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA -- 8k 기준으로 파일관리 -- ldf : log 파일 -- mdf : 실제 데이터 파일 -- 트랜젝션이 3번 실행됨 update customersTbl set addr = '천안' where custId = 'aaaaaaaa'; update customersTbl set addr = '천안' where custId = 'kkkkkkkk'; update customersTbl set addr = '천안' where custI..
#, ## --어느 DB에서든 접근 가능한 임시 테이블 #table, ##table --#, ##을 테이블 이름 앞에 붙여 테이블 접근 --# : 로컬 임시 테이블(생성한 사용자의 연결이 끊기면 삭제됨, 세션에서 나만 볼 수 있음, 내가 접속 종료하면 없어짐) --## : 전역 임시테이블(사용중인 사용자가 없으면 삭제됨: 사용중일때만 보여짐, 남들이랑 같이 볼 수 있음) --table 생성(앞에 #,##)을 붙여줌 create table #tempTbl (id int, txt nvarchar(10)); create table ##tempTbl (id int, txt nvarchar(10)); --값 넣기 insert into #tempTbl values(1,N'지역 임시 테이블'); insert into ##tem..
View --VIEW 를 사용하는 이유 --1. 자주 쓰는 쿼리문을 단순화 하기 위하여 --2. 보안을 위해 : 불필요한정보들/민감한 정보들을 제외하고 정보를 제공하기 위하여 --view생성 create view v_userTbl as select custId, custName, addr from customersTbl--이 안에내용만 바꾸면 됨 go --1. 에 해당할 때 --셀렉문 먼저 확인하기 select C.custName, s.saleDate, G.goodsName, S.sales from customersTbl C inner join salesTbl S ON C.custId = S.custId inner join goodsTbl G ON S.goodsId = G.goodsId --뷰로 만들기 creat..
인덱스 index --**장점 --검색속도 향상(그렇지 않은 경우도 있음) --쿼리 부하 감소 --**단점 --대략 10%정도의 추가공간 필요 --최초 인덱스 생성시간 필요 --데이터 변경 작업시 성능 저하 --**인덱스 종류 --1. 클러스터형 인덱스(Clustered) - 테이블 당 한개만 생성됨 --2. 비클러스터형 인덱스(Nonclustered) --clustered : 책의 목차 목록 --nonclustered : 책 맨 뒷장의 단어 찾기 --OnlineShopDB의 customersTbl 생성시 custId를 primary key로 지정 -- 따라서 custId 컬럼에 클러스터형 인덱스 자동 생성 --primary key에 비 클러스터형 인덱스 생성 가능 -- 방법 : primary key nonclustere..
column --column 추가 alter table customersTbl add email nvarchar(50) null; --column 삭제 alter table customersTbl drop column email --column 변경 alter table customersTbl alter column addr nvarchar(20) null; --제약조건 날리기 alter table customersTbl drop constraint DF__customers__grade__36B12243 --제약조건 연습 create table testTbl(id int, name nvarchar(10)); --등록 alter table testTbl add constraint PK_testTbl_id primary..