Programming/MSSQL

Programming/MSSQL

MSSQL GO문 트랜잭션

개요 MSSQL에서 스키마를 다량으로 추가/수정하는 쿼리를 테스트하려고 [BEGIN TRAN]-[ROLLBACK TRAN]을 걸고 테스트하는 도중, [ROLLBACK TRAN]이 씹히고 스키마가 모조리 변경되는 대참사가 발생한 이슈가 있어서 기록 및 제대로 이해하려는 목적으로 포스팅을 한다. GO를 사용하지 않는 트랜잭션 BEGIN TRAN SELECT @@TRANCOUNT -- : 1 CREATE TABLE [dbo].[TEST1] -- 추후에 롤백됨. ( [id] INT ); CREATE TABLE [dbo].[TEST1] -- 중복 생성으로 인한 에러가 발생하고, 트랜잭션이 롤백된 채로 이후 모든 명령어가 무시된다. ( [id] INT ); SELECT @@TRANCOUNT -- : 출력되지 않는다..

Programming/MSSQL

MSSQL 특정한 값 제외 평균

개요 Invalid한 값 0을 제외한 값들로 평균을 내고 싶어졌다. 그럴땐 IFNULL을 사용하면 된다. 본론 -- 테스트 테이블 세팅 CREATE TABLE Test1 ( uidBIGINT, scoreBIGINT, CONSTRAINT PK_TEST1 PRIMARY KEY (uid) ) GO INSERT INTO dbo.Test1 VALUES (1, 1) INSERT INTO dbo.Test1 VALUES (2, 5) INSERT INTO dbo.Test1 VALUES (3, 3) INSERT INTO dbo.Test1 VALUES (4, 0) INSERT INTO dbo.Test1 VALUES (5, 0) INSERT INTO dbo.Test1 VALUES (6, 0) INSERT INTO dbo.Te..

Programming/MSSQL

MSSQL 데드락 그래프

MSSQL에서 데드락 그래프를 뽑는 방법을 기록한다. 1. SSMS를 이미 설치해 놨다면, 아마도 깔려 있을 SQL Server Profiler 18을 실행한다. 2. [파일] -> [새 추적]을 누른다. 3. 접속 정보를 확인하고 연결 한다. 4. [이벤트 선택] -> [Locks] -> [Deadlock graph]를 체크한 다음 [실행]을 누른다. 5. 아래와 같이 창이 떴다면 이제 데드락을 일으켜 보자. -- 테스트 테이블 세팅 CREATE TABLE Test1 ( uid BIGINT, item1 Varchar(10), item2 Varchar(10), item3 Varchar(10), CONSTRAINT PK_TEST1 PRIMARY KEY (uid) ) GO INSERT INTO dbo.Tes..

Programming/MSSQL

MSSQL 페이지 위치 쿼리

작업 중에 MSSQL에서 현재 데이터가 어떤 페이지(물리적 페이지)에 있는지 알아야 하는 일이 있었는데, 그때 사용한 쿼리들을 정리하였다. 1. 테이블의 Page 현황 조사 쿼리 SELECT DB_NAME(PA.database_id) [DataBase], OBJECT_NAME(PA.object_id) [Table], SI.Name [Index], is_allocated, allocated_page_file_id [file_id], allocated_page_page_id [page_id], page_type_desc, page_level, previous_page_page_id [previous_page_id], next_page_page_id [next_page_id] FROM sys.dm_db_dat..

Programming/MSSQL

MSSQL 한번에 여러 row 빠르게 넣기

MSSQL에서 row을 임의로 삽입할 때, 가장 쉽게 생각할 수 있는 루프 문을 사용하는 방법으로 하면 몇천만 건씩 넣을 경우 매우 매우 느리다. 그래서 아래와 같은 방법으로 쿼리를 넣으면 꽤나 대량의 row도 순식간에 넣을 수 있다. -- 1000000 개의 순차적인 uid의 row를 넣는 쿼리. INSERT INTO [dbo].[Test1] SELECT TOP (1000000) Id = CONVERT(INT, ROW_NUMBER() OVER (ORDER BY s1.[object_id])), 1, 2, 3 FROM sys.all_objects AS s1 CROSS JOIN sys.all_objects AS s2

Programming/MSSQL

MSSQL order by 1

select * from TABLE order by 1; -> 1번 칼럼의 순서로 정렬 select * from TABLE order by 1 desc; order by 2를 하면 2번 칼럼의 순서로 정렬 할 수 있다.

장형이
'Programming/MSSQL' 카테고리의 글 목록