반응형 DB·SQL [SQL Server] 쿼리문 실행 예외 발생시 자동 롤백하는 T-SQL 예외처리 트랜잭션 코드 작성 방법 0 2021. 9. 24. T-SQL 초보에게는 다소 어려운 것이 트랜잭션 처리입니다. 많은 레코드를 한꺼번에 배치 처리하다가 중간에 에러라도 발생하면 트랜잭션 처리를 하지 않은 것이 뼈아프게 다가옵니다. T-SQL에도 예외 오류를 처리하는 처리 구문이 있고, 이 구문을 이용하면 프로그램에서 쿼리문 오류로 인해 발생하는 시스템 예외처리를 별도로 하지 않아도 되는 장점이 있습니다. 쿼리문 예외 처리 방법 T-SQL의 트랜잭션 처리는 간단합니다. BEGIN TRAN; -- 트랜잭션 시작 -- 배치 실행 쿼리문들 COMMIT TRAN; -- 성공시 ROLLBACK TRAN; -- 실패시 이때 배치 실행 쿼리문들 실행 중간에 에러가 나면 어떻게 될까? 성공한 쿼리문까지는 커밋이 되고, 에러를 발생시킵니다. 에러가 발생하기 전까지 성공한 .. [SQL Server] 테이블 스키마와 데이터를 sql 파일로 백업하기 0 2021. 6. 6. SQL Server 백업은 보통 데이터베이스 단위로 데이터베이스 전체 백업과 트랜잭션 백업을 하는 것이 보통입니다. 경우에 따라서는 테이블 단위로 백업하거나, 백업한 데이터를 재 가공해서 새 테이블을 만들어야 할 필요가 있습니다. 잘 안써서 모르는 이용자가 많지만 SQL Server도 MySQL이나 다른 DBMS의 백업 기능 처럼 스크립팅 sql 파일로 테이블 스키마와 테이블 데이터를 내보낼 수 있는 기능을 제공합니다. 데이터베이스의 일부 테이블만 다른 데이터베이스로 옮겨가거나, 테이블의 데이터 일부만 가져올 필요가 있을 때 이 기능을 사용하면 편리합니다. 왼쪽 개체 탐색기에서 데이터베이스 이름 위에 마우스 커서를 위치시키고 컨텍스트 메뉴를 엽니다.(마우스 오른쪽 버튼) 태스크 > 스크립트 생성을 선택합.. MySQL 테이블 자동 증가 AUTO_INCREMENT 속성의 값 초기화와 재 설정 0 2021. 4. 21. 자동증가 속성이 부여된 열은 새 행이 추가될 때마다 값이 1씩 자동으로 증가합니다. 자동 증가 값은 테이블 행의 삭제와 무관하게 새 행이 추가되면 값이 계속 증가합니다. 테이블 행을 모두 소거한 후 자동 증가 값을 1부터 다시 시작해야 하거나, 빈번한 행 삭제로 인해 자동 증가 열의 값이 불규칙해서 순서대로 값을 다시 부여할 때도 자동 증가 값은 초기화를 통해 적당히 원하는 값으로 재 설정을 할 필요가 있습니다. 자동 증가 속성이 설정된 테이블의 자동 증가 값을 초기화하는 쿼리문은 다음과 같습니다. 자동 증가 값은 테이블에 1개만 있을 수 있기 때문에 현재 자동 증가 값을 재설정 할 때 별도의 열 표시는 할 필요가 없습니다. 현재 자동 증가 값을 재 설정할 때 표시하는 값은 상수 값만 가능합니다. 자동 .. MSSQL 테이블 데이터를 .sql 스크립트로 MySQL로 가져오기 0 2019. 11. 28. MySQL의 마이그레이션 툴을 사용하면 손쉽게 데이터베이스 전체를 옮길 수도 있고, 테이블 단위로 데이터를 가져올 수도 있습니다.문제는 그 이후인데, 업데이트된 테이블만, 또는 테이블 데이터의 일부만 가져와야 하는 경우 중간 파일인 엑셀 파일을 이용한 귀찮은 수작업을 해야 합니다. MySQL이나 MariaDB는 DB백업이나 데이터 저장 이전 등을 위해 sql 스크립트 파일을 주로 사용합니다.텍스트 파일이므로 용량이 커지지만 가독성이 좋기 때문에 수정하기가 용이해서 선호됩니다. 다행히도 MSSQL도 sql 파일로 테이블 구조 및 데이터를 내보낼 수 있는 기능을 제공합니다.비록 사용 빈도가 너무 낮아서 대부분 잘 모르지만, 이 기능을 이용하면 엑셀 파일을 이용해 데이터를 옮기는 작업을 조금 수월하게 대신할 .. MySQL GROUP BY 보다는 DISTINCT 가 더 빠르다. 0 2019. 11. 26. DISTINCT와 GROUP BY 는 쿼리 선택 컬럼의 유니크 값들을 리턴하는 쿼리 구문입니다.동일한 결과를 가져오기만 쓰다보면 미세한 차이를 발견하게 됩니다. DISTINCT는 테이블에 저장된 순서 그대로를 가져오고, GROUP BY는 선택 컬럼을 기준으로 정렬된(정순) 결과를 가져옵니다.즉, GROUP BY 는 DISTINCT + ORDER BY 컬럼명 ASC 와 동일합니다. 예를 들어 1. select distinct p_name from product2. select p_name from product group by p_name 이 두 쿼리는 다른 타입의 DB에서는 정렬되지 않는 동일한 결과를 가져오지만MySQL/MariaDB 에서는 2번 쿼리는 왼쪽 결과처럼 정순으로 정렬된 결과를 가져옵니다... MSSQL 쿼리 결과를 하나의 문자열, 또는 JSON으로 가져오기 0 2019. 11. 25. Microsoft SQLServer는 상용 DB인 만큼문자열 처리와 JSON 처리를 위한 다양한 기본 함수와 제어문을 제공합니다. MSSQL에서는 쿼리문 끝에 "for 대상포맷 path" 과 같은 출력제어 옵션을 붙여서 쿼리 결과 레코드들을 대상 포맷으로 변환할 수 있습니다. 대표적인 출력제어옵션은 다음과 같은 것이 있습니다. - "for xml path" - 쿼리 결과를 xml 포맷으로 리턴- "for json path" - 쿼리 결과를 json 포맷으로 리턴 먼저 쿼리 결과 컬럼 값들을 하나의 문자열로 가져오려면 다소 원시적이지만 "for xml path" 를 이용한 트릭을 이용하는 방법이 있습니다.for xml path는 원래 결과 레코드들을 XML 포맷으로 리턴해주는 출력 제어 옵션인데 selec.. MySQL 쿼리 결과를 하나의 문자열, 또는 JSON으로 가져오기 0 2019. 11. 25. 쿼리 결과 컬럼값들을 배열이나 문자열, CSV 형태, 또는 JSON으로 반환해야 할 경우 보통은 결과값을 루프를 돌며 재가공 처리를 해야 합니다. 언어, 또는 프레임워크에 따라서는 쿼리 결과를 자동으로 JSON 이나 문자열 등의 형태로 생성해주는 메써드를 제공해주기도 하기 때문에 이런 기능이 지원될 경우 이 기능을 사용하는 것을 추천합니다. 또는 루프를 돌아 쿼리 결과를 재가공 하는 메써드나 함수를 아얘 만들어 재사용 해도 되기 때문에 초기 작업을 제외하면 그닥 번거로울 일은 없겠지만결과값을 얻는데 서버의 리소스와 더 많은 런타임 시간을 요구하게 됩니다. MySQL 에는 이런 경우를 위해 GROUP_CONCAT() 함수가 지원되며, 이 함수를 이용하면 결과 컬럾값들을 구분 기호로 구분된 하나의 문자열로 .. MySQL DateTime 포맷과 문자열 날짜값의 비교, 그리고 date_format() 날짜 포매팅 0 2019. 11. 24. MySQL(MariaDB)의 날짜 정보 저장 필드는 보통 DateTime 포맷을 사용합니다. 데이터는 밀리세컨드 단위까지 저장되는 타임틱 값이기 때문에 쿼리문으로 선택을 해야 날짜 포맷으로 표시가 됩니다. 반면 실제 웹개발을 할 때 날짜, 또는 시간 값을 입력받아 쿼리문으로 비교를 하는 경우 "2019-11-23" 과 같은 문자열로 입력을 받아 서버로 전송하는 것이 일반적입니다. 전송된 날짜 문자열을 DateTime 필드와 비교를 하려면 1. 서버로 전송한 문자열을 날짜 포맷으로 변환해 DateTime 필드와 비교하거나, 2. DateTime 필드의 시간값을 "yyyy-mm-dd" 10자리 문자열로 변환해 문자열을 비교해야 합니다. 결론부터 말하면 1번이 실행 속도면에서는 미세하게 더 빠릅니다. 다만, .. 반응형 이전 1 다음