일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- scrapy
- Serial
- 오라클
- 티스토리 초대장
- oracle
- rs422
- matplot
- MSSQL PYTHON
- M2M
- django
- 크롤링
- vscode
- MSSQL
- 텐서플로우
- Visual Studio Code
- sql developer
- MX Component
- tensorflow
- windows10
- 장고
- pymssql
- 자본주의
- PYTHON MSSQL
- 윈도우10
- rs485
- 파이썬
- MEAN Stack
- 딥러닝
- Python
- c#
- Today
- Total
목록DataBase/MS SQL (87)
안까먹을라고 쓰는 블로그
트랜잭션(Transaction) 이란? 트랜잭션은 작업의 한 단위입니다. 트랜잭션이 성공하면 트랜잭션 동안 이루어진 모든 데이터 수정은 커밋되고, 데이터베이스의 영구적인 부분이 됩니다. 트랜잭션에 오류가 발생하여 취소되거나 롤백되면, 모든 데이터 수정은 지워집니다. MSSQL의 트랜잭션 모드 자동 커밋 트랜잭션 개별적으로 실행하는 쿼리가 해당됩니다. 명시적 트랜잭션 (일반적으로 생각하는 트랜잭션) 각 트랜잭션이 BEGIN TRANSACTION 문으로 명시적으로 시작하여, COMMIT 또는 ROLLBACK문으로 명시적으로 완료 됩니다. 암시적 트랜잭션 새 트랜잭션은 이전 트랜잭션이 완료되면, 암시적으로 시작되지만, 각 트랜잭션은 COMMIT 또는 ROLLBACK문으로 명시적으로 완됴 됩니다. 일괄 처리 범..
조회 프로시저를 작성하다보면, 데이터의 순차적인 합계가 필요한 경우가 있다. Ex) 누적되는 재고를 각각 보고 싶다고 요청하는 경우 등.. 원본테이블 SELECT DT_ORDER, CD_ITEM, QT_ORDER FROM [NEOE].[ORDER] ORDER BY DT_ORDER, CD_ITEM 사용방법 SUM([합계구할 컬럼]) OVERT PARTITION BY [그룹지을 컬럼들..] ORDER BY [정렬할 컬럼들..] ※ SUM 으로 되어있는 부분은 다른 집계함수(AVG, COUNT, MIN, MAX) 로도 변경 가능합니다. 순번을 매길때는 SUM([합계구할 컬럼]) 을 ROW_NUMBER() 로 변경하여 사용 가능합니다. 사용예제 SELECT DT_ORDER, CD_ITEM, QT_ORDER, S..
MSSQL 의 집계함수들에 대한 정리자료 입니다. 테이블 정보 SELECT DT_ORDER, CD_ITEM, QT_ORDER FROM [DZ].[dbo].[ORDER] ORDER BY DT_ORDER, CD_ITEM DT_ORDER : 20230901 에는 CD_ITEM : item1 이 2개 있습니다. DT_ORDER : 20230902 에는 CD_ITEM : item2 이 2개 있습니다. DT_ORDER : 20230903 에는 CD_ITEM : item3 이 2개 있습니다. GROUP BY GROUP BY는 - GROUP BY [설정컬럼 들...] 와 같이 사용하며, 설정한 "설정컬럼 들.."을 기준으로 하여, 그룹을 지어서 조회가 되며, ※ "설정컬럼 들.."에 없는 컬럼은 SUM, COUNT, ..
아래의 쿼리를 실행하면, 여태까지 MSSQL 서버에서 실행된 쿼리 중에서, 설정 된 시간 아래의 " > 1000000"보다 오래걸린 쿼리내역이 조회된다!! ※ 아래 쿼리 실행시에는 MSSQL 관리자권한 로그인 필요!! SELECT TOP 1000 (qs.total_elapsed_time / qs.execution_count) as each_elapsed_time, st.text as query FROM sys.dm_exec_query_stats as qs WITH(NOLOCK) CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st WHERE (qs.total_elapsed_time / qs.execution_count) > 1000000 ORDER BY each..
프로시저 안에는 여러 개의 쿼리가 있을수 있고, 다른 프로시저를 호출할 수도 있다. 이런 각 부분 마다 아래와 같이 시간과 구분값을 표시할 수 있는 PRINT문을 추가한다. 구분 값은 숫자를 트리 형식으로 하면 확인하기 좋다. Ex) 1.1 1.1.1 1.1.1.1 1.2 1.2.1 PRINT(CONVERT(NVARCHAR(100), GETDATE(), 120) + ' : 1.2') 위의 방법으로 프로시저를 SSMS에서 실행하면, 하단의 결과 값의 "메시지" 부분에 위에 추가한 PRINT문의 값이 표시된다. 각 구분 값의 시간을 확인하여, 어디에서 불필요하게 많은 시간이 소요되는지 확인한다. 이 부분의 쿼리를 수정하여, 성능을 개선한다. ■ 개선방법 Case1. 특별한 작업을 하지 않았는데, 갑자기 느려..
오라클 코드 SELECT * FROM TEMPA WHERE (A, B) IN (SELECT A, B FROM TEMPB WHERE C ='Y') DELETE FROM TEMPA WHERE (A, B) IN ( SELECT A, B FROM TEMPB WHERE C = 'Y' ) SELECT A, B, C, D FROM TABLE_A WHERE (A, B) IN ( SELECT BB.A, CC.B FROM TABLE_B BB, TABLE_C CC WHERE BB.A = CC.A ) MSSQL 코드 SELECT A.* FROM TEMPA A WHERE EXISTS (SELECT 1 FROM TEMPB B WHERE B.A = A.A AND B.B. = A.B AND C = 'Y' ) DELETE FROM T..
트리거(Trigger) - 특정 테이블에 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생하면 DBMS에서 자동적으로 실행되도록 구현 된 프로그램 입니다. - 이벤트는 전체 트랜잭션 대상과 각행에 의해 발생되는 경우 모두를 포함할 수 있으며, 테이블과 뷰, DB 작업을 대상으로 정의할 수 있습니다. 트리거의 목적 - 특정 테이블에 대한 데이터 변경을 시작점으로 설정하고, 그와 관련된 작업을 자동적으로 수행하기 위해 트리거를 사용합니다. - 일반적으로 이벤트와 관련된 테이블의 데이터 삽입, 추가, 삭제 작업을 DBMS가 자동적으로 실행시키는데 활용합니다. 트리거 예제소스 - ON [NEOE].[PU_POL] 과 같이 적용할 테이블을 지정 - AFTER UPDATE/INSERT/DELETE 등의 트리거를 ..
ORACLE은 아래와 같이 IN절에 필드를 여러개 사용할 수 있습니다. 하지만 MSSQL에서 동일한 쿼리 실행 시, 오류가 발생합니다. SELECT TOP 10 * FROM MA_EMP where (NO_EMP, NM_KOR) IN (('000708001', '윤태원'), ('000708002', '이미선')) 편법이긴하지만, 아래와 같이 사용가능합니다. 데이터가 많아지면, 조건절의 데이터 가공관련, 성능상으로는 문제가 발생할 수도 있을 것 같습니다. SELECT TOP 10 * FROM MA_EMP where (NO_EMP + NM_KOR) IN ('000708001' + '윤태원', '000811001' + '고명진') 끝~
Microsoft SQL Management Studio 에서 해당 테이블에서 마우스 오른쪽 버튼을 눌러서 트리거를 켜고 끌수도 있으나, SQL 쿼리문을 통해 활성화(Enable) / 비활성화(Disable) 시키는 방법 입니다. ■ 트리거 활성화 시키기 (트리거가 걸린 테이블을 선택해줘야 합니다) ALTER TABLE '테이블명' ENABLE TRIGGER '트리거명' ■ 트리거 비활성화 시키기 (트리거가 걸린 테이블을 선택해줘야 합니다) ALTER TABLE '테이블명' DISABLE TRIGGER '트리거명' 끝~
MSSQL에서 ORACLE 서버를 링크드서버 설정하여, 프로시저에서 OPENQUERY를 사용하는데,, 계속 잘 되던 쿼리인데,, 갑자기 되지않는다..성능문제인지,,, BETWEEN에서 아래와 같이 하면 안되는데,, SUBL_DATE BETWEEN TO_CHAR(SYSDATE-7,''YYYYMMDD'') AND TO_CHAR(SYSDATE,''YYYYMMDD'') 아래와 같이 직접입력을 해주면 조회가 됨;;;; SUBL_DATE BETWEEN ''20220808'' and ''20220812'' ') ■ 안되는 쿼리 (기존쿼리) - 프로시저에서 일반 쿼리로 실행되도록 처리 INSERT INTO CZ_KIDV_OUTPUT_PARCEL ( SUBL_DATE, TAX_NO, SUBL_NO, ORDER_NO, R..