본문 바로가기

Develop/MSSQL28

[sqlite] SQLite 여러행 업데이트 & CORRELATED SCALAR SUBQUERY # MSSQL 처럼 JOIN 을 사용한 UPDATE 구문은 사용할 수 없다. UPDATE T SET T.SuNo = S.SuNo FROM tbSS T INNER JOIN tmp_tbSS S ON S.SuIdx = T.SuIdx # SQLite에서 여러행 업데이트는 아래와 같이 할 수 있다. -- EXPLAIN QUERY PLAN UPDATE OR IGNORE tb_SS SET SuNo = (SELECT SuNo FROM tmp_SS WHERE SuIdx = tb_SS.SuIdx) WHERE EXISTS ( SELECT * FROM tmp_SS WHERE SuIdx = tb_SS.SuIdx ) # 실행계획도 한번 보고~ # CORRELATED SCALAR SUBQUERY 가 보인다. 뭘까? - 상호연관(상.. 2021. 11. 21.
[sql] Stream Aggregate 언제? 왜? (실행계획, aggregate, hash match) SELECT COUNT(idx) AS idx FROM table_A WHERE idx = 6 # 왜 Stream Aggregate 가 나타날까? idx 컬럼은 PK. SELECT 결과는 항상 결과가 하나인데 왜 Stream Aggregate 하지? 위와 같은 단순한 쿼리에서 시작한 질문으로 aggregate와 관련된 실행계획을 공부했다(아직 진행중...) # Stream Aggregate 공부를 해보자 Stream Aggregate 적절하게 정렬된 스트림에서, 행 그룹에 대한 요약 값을 계산합니다. Hash Match 정렬되지 않은 스트림에서, 최상위 입력의 각 행으로 해시 테이블을 작성하고, 최하위 입력의 각 행으로 해시 테이블을 검색하여, 일치하는 모든 행을 출력합니다. [ Sort -> Stream.. 2021. 11. 16.
[sql] 모든 제약조건 제거 모든 테이블 제거 쿼리 -- 모든 제약조건 제거 SELECT 'ALTER TABLE dbo.' + TABLE_CATALOG + ' DROP CONSTRAINT' + CONSTRAINT_NAME + ';' AS dropCon INTO #A FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE -- 모든 테이블 제거 SELECT 'DROP TABLE dbo.' + TABLE_NAME AS dropTable INTO #A FROM INFORMATION_SCHEMA.TABLES -- 실행 DECLARE @cnt int = 1 DECLARE @total int; SELECT @total = COUNT(*) FROM #A WHILE @cnt 2021. 11. 11.
[sql] EXECUTE 후 트랜잭션 개수는 BEGIN 및 COMMIT 문 수가 일치하지 않음을 나타냅니다. 이전 개수 = 0, 현재 개수 = 1. MSSQL 프로시저 실행 후 아래와 같은 에러 메시지를 마주할 때가 있다. 실행 프로시저가 BEGIN TRAN을 제대로 COMMIT 또는 ROLLBACK 되지 않았을 때 나타난다. 분명 아래와 같이 BEGIN TRY 로 실행 쿼리문을 잘 감 싸줬고, BEGIN CATCH로 에러도 잘 핸들링 해줬다. 원인은 TRY...CATCH 에 잡히지 않는 실행문이 존재하기 때문이다. 위의 예제에서는 존재하지 않는 테이블에 INSERT 하려는 경우다. 위와 같은 상황을 방지하기 위해 SET XACT_ABORT ON 를 사용할 수 있다. XACT_ABORT ON 인 경우 Transaction-SQL 문이 런타임 오류를 발생시킬 경우 해당 트랜잭션이 종료되고 ROLL BACK 된다. 구문오류와 같은 컴파일 오류는 XACT.. 2021. 11. 8.
[sql] cross apply 사용법 뭐지 어떻게 쓰지 - CROSS APPLY : 다른 테이블 이용해서 INNER JOIN 이랑 동일한 기능. SELECT * FROM table_a SS CROSS APPLY ( SELECT * FROM table_a X WHERE SS.col_1 = X.col_1 AND SS.col_2 = X.col_2 AND SS.col_3 = X.col_3 ) XX - INNER JOIN : 위에 CROSS APPLY 사용한 결과와 같은걸 확인할 수 있다. SELECT * FROM table_a SS INNER JOIN table_a X ON SS.col_1 = X.col_1 AND SS.col_2 = X.col_2 AND SS.col_3 = X.col_3 - CROSS APPLY : VALUES 로 데이터 주기(table-value.. 2021. 10. 25.
[mssql] 조회 순번 & 페이징 쿼리 ROW_NUMBER() OVER() OVER() 에 ORDER BY 필수. (SELECT 1) 꼼수. 정렬한 순번이 필요하면 적절한 값 입력. - 조회 순번 SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rownum FROM myTable; - 페이징 쿼리 DECLARE @PAGE_NO INT = 1 DECLARE @PAGE_ITEM_CNT INT = 10 SELECT rownum, col1, col2, col3, totalCnt FROM ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rownum , col1, col2, col3 , COUNT(*) OVER() AS totalCnt FROM myTable ) tb WH.. 2021. 10. 7.
[mssql] cheet sheat 컬럼으로 테이블 찾기 특정 컬럼을 갖는 테이블 찾기 컬럼이름으로 테이블 찾기 SELECT T.name AS table_name, C.name AS column_name FROM sys.tables AS T INNER JOIN sys.columns AS C ON T.object_id = C.object_id WHERE C.name = '컬럼명' SQL Server Lock check 락 걸린 디비 서버 정보 확인 DB 디비 교착상태, 디비 락, DB lock, db lock SELECT DB_NAME(tl.resource_database_id) as 'DB Name', tl.resource_type, tl.resource_associated_entity_id, tl.request_mode, tl.reque.. 2021. 10. 1.
[mssql] DATETIME cheatsheet mssql data format datetime 표시 convert datatime 번호 쿼리 결과 코드 0 CONVERT(CHAR(19), DATETIME, 0) 01 02 2000 1:14PM MM DD YYYY H:MM 1 CONVERT(CHAR(10), DATETIME, 1) 01/02/2000 MM/DD/YYYY 2 CONVERT(CHAR(8), DATETIME, 2) 00.01.02 YY.MM.DD 3 CONVERT(CHAR(8), DATETIME, 3) 02/01/00 DD/MM/YY 4 CONVERT(CHAR(8), DATETIME, 4) 02.01.00 DD.MM.YY 5 CONVERT(CHAR(8), DATETIME, 5) 02-01-00 DD-MM-YY 6 CONVERT(CHAR(8).. 2021. 9. 27.