반응형
반응형
개요서비스 중인 데이터베이스의 테이블 값을 변경하려 할 때의 작업은 매우 조심스럽다. 사내 데이터베이스 구조는 스테이징 서버가 따로 없고, 개발 서버 > 운영 서버를 거치는 구조인데, 개발 서버 또한 사내에서 관련 작업을 하는 부서가 따로 있기 때문에... 트랜잭션으로 안전하게 하려고 테이블 락을 걸수도 없을 뿐더러, 테이블의 데이터를 마음대로 바꾸어서는 안된다. 때문에 나는 주로 임시로 사용할 temp 테이블을 복사할 때 Export Data / Import Data를 사용하여 서비스 중인 데이터베이스의 테이블을 복사하여 복사된 테이블에서 데이터를 가공한 후, 이상이 없는지 검증 후에 본 서버의 데이터베이스 테이블과 가공된 부분만 업데이트하는 작업을 추가로 한다. 어느 날, 특정 데이터베이스의 데이터를..
개요 상황에 따라서 내가 원하는 입력 순서대로 값을 출력해야될 때가 있다. 예를 들어 보자. 행의 값이 각각 '1', '2', '3'인 행이 있다. 이 중에서 임의로 '2' > '3' > '1' 의 순서로 결과를 조회해야 한다. 하지만 MSSQL에서는 '1' > '2' > '3' 순서대로 결과가 출력된다. 입력 쿼리 select * from number_table where number in (2, 3, 1) 조회 결과 내가 생각한대 순서대로 조회되지 않고 자동적으로 정렬되어서 나온다. 왜 그럴까? 그리고 어떻게 해야 할까? [ 결과 미리 보기 ] 1부터 9까지의 값이 있는 테이블이 있다. 나는 이 테이블을 2, 4, 6, 8, 9, 7, 5, 3, 1 순으로 조회를 해야 한다. [ 참고사항 ] 이 포스..
개요 데이터베이스에서 결과 셋의 행대로 번호를 매겨야 하는데 다음과 같은 에러가 출력되었다. select row_number() over(order by 1), username, address from testTable 에러 메시지 Msg 5308, Level 16, State 1, Line 22 기간 이동 함수, 집계 및 NEXT VALUE FOR 함수는 ORDER BY 절 식으로 정수 인덱스를 지원하지 않습니다. 이 에러가 무슨 뜻일까? 궁금증을 해결할 겸 ROW_NUMBER에 대해 알아보기로 했다. ROW_NUMBER ROW_NUMBER 이란? 결과 집합의 출력 번호를 지정한다. 즉, 모든 행의 번호를 순차적으로 지정하는 기능을 한다. ROW_NUMBER은 번호를 매기는 점에 있어서는 RANK와 유..
개요 데이터베이스에서 날짜를 다룰 때 날짜별로 결과를 확인하거나 데이터를 처리해야되는 경우가 있다. 하지만 데이터베이스 혹은 프레임워크에 따라 서로 다른 날짜 표시 형식으로 출력될 수 있다. 이로 인해 매번 다르게 처리해야하는 곤란할 경우가 생길 수 있다. (시계열 데이터가 다르게 출력되는 이유는 데이터베이스의 버전, 데이터베이스 시스템에 설정된 언어, 데이터베이스 및 테이블에 정의된 인코딩 형식에 따라 다를 수 있다.) 예시 종류 내용 날짜 출력 형식 A데이터베이스 날짜 및 시간 데이터 형식의 데이터 출력 2024-01-24 12:00:00 B데이터베이스 날짜 및 시간 데이터 형식의 데이터 출력 2024-01-24 12:00:00.000 C데이터베이스 문자열 관련 함수(LEFT) 사용하여 출력 Jan ..
Error) 동적 쿼리를 실행하려는데 작성한 sql문을 실행하니 다음과 같은 에러가 출력되었다. 아래는 이해를 돕기 위해 쿼리문을 간소화 시켜 에러를 발생한 예시 구문이다. exec sp_executesql 'select 1' /* 에러 내용 Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1 [Batch Start Line 182] 프로시저에 'ntext/nchar/nvarchar' 유형의 매개 변수 '@statement'이(가) 필요합니다. */ 원인 파악 이 에러가 왜 발생하는지를 알려면 우선 sp_executesql 프로시저에 대해 이해를 해야한다. sp_executesql 란? sp_executesql 는 MSSQL 에서 사용되는 저장 프로..
오류 화면 및 해결 방법 Msg 8116, Level 16, State 1, Line 6 len 함수의 인수 1에 대한 인수 데이터 형식 ntext이(가) 잘못되었습니다. 결론적으로 말하면, Len() 함수는 'ntext' 데이터 형식에 대해 사용할 수 없다. ntext 또는 text, image 데이터 형식의 길이를 확인하려면 DATALENGTH() 함수를 사용하여야 한다. ntext, text, image 데이터 타입이란 것은 뭘까? 테이블을 확인해 보니 데이터 타입이 ntext로 되어 있었다. ntext, text, image 데이터 타입은 대용량의 유니코드 및 비유니코드 문자와 이진 데이터를 저장하기 위한 고정 및 가변 길이 데이터 형식이다. 유니코드 데이터는 Unicode UCs-2(UTF-16..