본문 바로가기

728x90
반응형

프로그래밍&IT/SQL Server (MS-SQL)

(17)
SQL Server - 테이블 수정 저장시 '테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함' 옵션 "디자인"에서 테이블 수정할 때 저장이 안 될 때 [테이블을 다시 만들어야 하는 변경 내용 저장 사용 안 함] 옵션 문제 생길 때. SQL Server Management Studio (SSMS)에서 테이블 수정 시 이와 같이 메시지가 나오면서 수정이 안 될 때? 컬럼의 NULL 허용 설정 변경 테이블의 컬럼 순서 변경 컬럼 데이터 형식 변경 새로운 컬럼 추가 이러한 사항은 메시지와 같이 해당 옵션을 사용할 때 발생한다. 도구 → 옵션 → 디자이너 [테이블을 다시 만들어야 하는 변경 내용 저장 안 함]의 옵션을 체크 해제한다. 수정 후 저장이 가능하다. 사실 간단한 건데 매번 찾아보기 뭐해서 글을 올려둔다.
SQL Server - FOR XML PATH 그리고 STUFF FOR XML PATH, STUFF 그리고 조합해 보기 FOR XML PATH 쿼리 결과를 XML 형태로 표현. FOR XML PATH ('row element 이름') 만약 'row element 이름'이 없으면 로 감싸진다. 행 구분자 추가해서, 합친 문자로도 SELECT lastname FROM HR.Employees FOR XML PATH ex) CameronDavisDoyleFunkKingLewMortensenPeledSuurs SELECT lastname FROM HR.Employees FOR XML PATH ('LName'); 결과 - Cameron Davis Doyle Funk King Lew Mortensen Peled Suurs SELECT '/' + lastname FROM HR.Em..
SQL Server - GO에 대해서 (BATCH) GO를 알기 전에 작업단위 (BATCH)란? 실행을 위해 프로그램으로부터 서버로 동시에 전송되어 실행되는 여러 T-SQL문장의 조합 MSSQL의 데이터베이스 엔진은 작업단위로 전송된 SQL 문장들에 대해 단일 실행계획으로 만들어 수행 만약 작업단위내 한 문장이라도 컴파일 오류를 포함하게 되면 해당 작업단위는 수행되지 않는다 이때, 일괄처리를 정하기위해서 "GO"라는 예약어를 사용한다. GO를 쓰는 이유. 한마디로 BATCH (일괄처리)의 단위라고 볼 수 있다. 한줄 한줄 실행할 때마다 매번 데이터베이스에 접속하면 처리시간이 길어지고 비효율적이다. 이에 큰 덩어리 단위로, 묶어서 보내주는 BATCH 개념이 나오게 된다. 그리고 GO는 그 구분점. GO명령어는 T-SQL의 구문이 아니며, 아래의 3개 툴에서..
트랜젝션.Transaction - 원자성, 일관성, 격리성, 영속성 (ACID) 트랜잭션 (Transaction , 작업단위) 여기에선 데이터를 쿼리하고 변경하는 다양한 작업뿐만 아니라 데이터 정의를 변경하는 작업도 포함된다. 경계는 명시적 / 암시적으로 지정할 수 있다. - 명시적 직접 BEGIN문과 COMMIT [실패시 ROLLBACK] TRAN을 사용한다. BEGIN TRAN/TRANSACTION 구문을 사용하며, 마지막 부분에는 COMMIT TRAN / TRANSACTION이나 ROLLBACK TRAN / TRANSACTION을 지정한다. - 암시적 기본적으로 개별 구문마다 트랜젝션으로 묶어서 처리하게된다. - 암시적 트랜젝션 구문 IMPLICIT_TRANSACTIONS = on / off [ON 이면 암시적 트랜젝션] 트랜젝션의 끝에는 COMMIT이나 ROLLBACK을 지정..
데이터 조작 - 데이터 입력하기 (INSERT VALUES, SELECT, BULK) - 아는 것도 있지만, 살짝 아리까리한것도 있어서 한 번에 정리 * INSERT VALUES (& 향상된 VALUES) - 대부분이 많이 아는 (기초적인) 구문일듯. INSERT INTO dbo.Orders(orderid, empid, custid) VALUES(10002, 5, 'B'); INSERT INTO dbo.Orders (orderid, orderdate, empid, custid) VALUES (10003, '20090213', 4, 'B') , (10004, '20090214', 1, 'A') , (10005, '20090213', 1, 'C') , (10006, '20090215', 3, 'C'); -- 여러 행을 쉼표로 구분해서 넣을수도 사실은 이 구문보단 아래의 사항을 복습하려는게 목..
그룹핑 집합 (GROUPING SETS, CUBE, ROLLUP, GROUPING, GROUPING_ID) 그룹핑 집합? 그룹핑을 수행하는 특성들의 집합. 아래의 4개의 결과 집합을 하나의 단일 결과집합으로 반환한다고 한다면, SELECT empid, custid, SUM(qty) AS SumQty FROM dbo.Orders GROUP BY empid, custid UNION ALL SELECT empid, NULL, SUM(qty) AS SumQty FROM dbo.Orders GROUP BY empid UNION ALL SELECT NULL, custid, SUM(qty) AS SumQty FROM dbo.Orders GROUP BY custid UNION ALL SELECT NULL, NULL, SUM(qty) AS SumQty FROM dbo.Orders; 코드의 길이, 성능이라는 문제를 내포한다. ..
데이터 피벗, 언피벗 (Pivot, Unpivot) 데이터 피벗? 행을 기반으로 하는 데이터를 컬럼을 기반으로 하는 상태로 바꾸는 것. 다음같은 내용의 결과가 있다고 할 때, SELECT empid, custid, SUM(qty) AS SumQty FROM dbo.Orders GROUP BY empid, custid; 직원 ID별 (행), 고객별 (컬럼) 의 총 수량을 출력하고자 하는 리포트를 만들고자 한다면. (피벗팅) 모든 피벗팅은 3가지 논리적 프로세싱 단계로 수행되며, 각 단계마다 필요한 요소가 존재한다. 그룹핑 - 연관된 그룹핑 또는 행 요소를 필요로 하며, 전개 - 연관된 전개 요소 또는 컬럼 요소를 필요로 하며, 집계 - 연관된 집계 요소와 집계 함수를 필요로 한다 여기선 각 직원ID마다 결과를 하나의 행으로 출력 (그룹핑) 고객ID별로 수량..
윈도우 함수 : 순위, 오프셋, 집계 윈도우 함수 (Window function) 쿼리를 기반으로 하는 각 행들의 윈도우 (집합)에 대해 연산을 하거나, 이 행들을 이용해서 계산 후 스칼라 (단일) 결과값을 출력하는 함수. 윈도우 행들의 서브집합. 현재 행과 관련된 윈도우 설정을 기반으로 한다. 서브쿼리처럼 집합에 대해 연산을 수행할 수 있지만, 서브쿼리는 데이터에 대한 뷰를 대상으로 연산한다는 점에서 차이. 필요에 따라 결과집합의 관계형 측면을 훼손시키지 않으면서도 계산 작업의 일부로 순서를 정의할 수 있게 해 준다. SELECT a.SalesOrderID , CONVERT(varchar, a.ModifiedDate, 112) as date , a.LineTotal , SUM(linetotal) OVER ( PARTITION BY sale..
TOP, OFFSET-FETCH 필터 - 리턴되는 행의 수 제한 TOP SQL Server 7.0부터 지원 쿼리가 반환하는 결과 중 특정 행의 수나 퍼센트만으로 제한. 현재 Data 수는 295개 - 5개의 행 리턴 SELECT TOP 5 * FROM SalesLT.Product - 10퍼센트의 행 리턴 : 총 295개 중 10% 29.5 -> 올림 해서 30개를 조회한다. : 16퍼센트 > 47.2 -> 48개를 조회한다. SELECT TOP 10 PERCENT * FROM SalesLT.Product -- 10 퍼센트만 조회 WITH TIES 동일한 값을 가지는 행을 출력하게 할때 사용한다. 10개를 조회해도, 동일한 값이 있으면 조회한다. (테스트를 위해 좀 극단적인 데이터를 조회했음.) SELECT TOP 10 WITH TIES * FROM SalesLT.Pr..
WITH 절, 재귀 CTE (Common Table Expression) 저번 CTE관련해서, 재귀 CTE CTE관련된 첫번째 포스팅: WITH 절 CTE (Common Table Expression) 임시테이블? * 재귀 CTE??- 적어도 2개이상의 쿼리를 통해 정의- 적어도 하나는 고정멤버, 나머지 하나는 재귀멤버가 되는 형태 * 기본적인 재귀 CTE 형식WITH [ () ]AS(UNION ALL); - 기준 멤버는 관계형 결과 테이블을 반환하는 쿼리.- 재귀 쿼리가 아닌 일반적인 테이블표현식으로 정의되는 쿼리인 기준 멤버는 한 번만 호출- 기준 멤버와 재귀 멤버의 쿼리가 반환하는 컬럼의 숫자나 컬럼의 데이터 형식은 반드시 일치해야- 외부 쿼리에서 CTE 이름을 참조하는것은 기준 멤버로부터 만들어지는 단일 결과셋 또는 재귀멤버의 모든 반복적인 호출을 통해 만들어지는 결과..

반응형