Database
-
MSSQL UPDATE with row_number()Database/MSSQL 2018. 9. 4. 09:13
시퀀스 또는 인덱스 칼럼을 나중에 만들었을 경우 그 칼럼의 값은 NULL일 것이고, 값을 중복되지 않은 값들로 1씩 증가하여 채워야지 정상적으로 자동증가값으로 변경할 수 있다. 이 때, 이 칼럼을 행번호로 채우면 되지 않을까. WITH ttt AS (select ROW_NUMBER() over (order by [CreateDate]) as rownum, * from MyTable)update ttt set IN_DEX=rownum
-
MSSQL 오류 해결 트랜잭션 로그가 꽉 찼습니다.Database/MSSQL 2018. 8. 17. 10:46
[출처: (오류 해결) 트랜잭션 로그가 꽉 찼습니다.] 트랜잭션 로그를 때때로 백업하고 비워줘야 한다. 그렇지 않으면 로그 파일이 꽉 차서 SQL 서버에 에러가 발생한다. 에러 메시지는 "트랜잭션 로그가 꽉 찼습니다." 에러 처리 방법은 두가지가 있다(물론 더 많이 있겠지만 필자가 아는 것이 두가지). 1. SSMS의 메뉴를 사용하는 방법(마우스를 사용하는 방법)2. SQL로 처리하는 방법(SQL 창을 사용하는 방법) 이 두가지에 대해서 수행 과정을 화면 캡쳐한 것 중심으로 정리한다. 아래 그림은 순서대로 캡쳐한 것이다. 화면을 크게 보고 싶을 경우 그림을 클릭하면 원본으로 크게 볼 수 있다. 체크 표시는 왼쪽 마우스 버튼을 클릭하라는 의미이고 밑줄은 오른쪽 마우스를 클릭하라는 의미다. 1. SSMS의 ..
-
MSSQL 날짜 계산 DATEADD (날짜형식이 문자열일때 포함)Database/MSSQL 2018. 7. 4. 11:07
DECLARE @DDate datetimeDECLARE @VDate varchar(10)SET @DDate=getdate()SET @VDate ='2018-07-04' * 값이 문자열이면 date 또는 datetime으로 형변환한다. 1. 날짜 더하기 - 1일 SELECT DATEADD(day, 1, @DDate)SELECT DATEADD(day, 1,Convert(date,@VDate)) - 1달SELECT DATEADD(month, 1, @DDate)SELECT DATEADD(month, 1,Convert(date,@VDate)) - 1년 SELECT DATEADD(year, 1, @DDate)SELECT DATEADD(year, 1,Convert(date,@VDate)) 2. 날짜 빼기 - 1일 S..
-
MSSQL Service Broker 활성화하는 방법 (사용중인 DB 포함)Database/MSSQL 2018. 6. 15. 11:48
Service Broker 설명은 여기서 (MSDN)https://docs.microsoft.com/ko-kr/sql/database-engine/configure-windows/sql-server-service-broker?view=sql-server-2017 SSMS에서 Service Broker를 활성화하는 방법 1. 데이터베이스 속성 - 옵션 - Service Broker에서 Broker 활성화를 True로 바꾸고 저장한다. 2. 쿼리로 데이터베이스 업데이트ALTER DATABASE [MyDatabase] SET ENABLE_BROKER 그런데 1과 2의 방법은 데이터베이스가 사용중이면 상태를 변경할 수 없다. 1은 아래와 같은 오류 메시지 창이 나오고, 2는 될 때까지 계속 쿼리를 실행중인 상태..
-
MSSQL Database, Table, Column 존재 여부 확인Database/MSSQL 2018. 6. 5. 10:37
1. 데이터베이스 존재 여부select * from sys.sysdatabases where name='데이터베이스명'있으면, 1개의 행 없으면, 0개의 행 2. 테이블 존재 여부 - select * from sysobjects where name='테이블명' - select * from information_schema.tables where TABLE_NAME='테이블명' 있으면, 1개의 행 다음은 A 데이터베이스에 테이블명 테이블이 있을 때 결과 없으면, 0개의 행다음은 B 데이터베이스에 테이블명 테이블이 없을 때 결과 3. 칼럼 존재 여부select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='테이블명' and COLUMN_NAME ='칼럼명' 있으..
-
MSSQL 중복제외 SELECT, 중복삭제 DELETEDatabase/MSSQL 2018. 5. 1. 20:31
1. 중복된 데이터는 제외하고 조회하기 (SELECT) - field1에서 중복되는 데이터는 제외하고 조회 됨. 1) SELECT DISTINCT field1 FROM Table 2) SELECT field1 FROM Table GROUP BY field1 3) 중복된 것 중에는 ID가 큰 것만 조회 SELECT column_name from Table WHERE ID in (select max(ID) from Table group by field1) 2. 중복된 데이터 삭제하기 (DELETE) - field1에서 중복되는 데이터들 중에 하나만 남기고 다 삭제 1) 고유아이디를 가진 칼럼이 있을 때 DELETE FROM Table WHERE IDs in ( SELECT IDs FROM Table A IN..
-
MSSQL 시퀀스(행번호, ID) n배수 SELECT, UPDATEDatabase/MSSQL 2017. 12. 29. 14:56
1. 테이블에 시퀀스(행번호, ID)가 있을 때 시퀀스의 n의 배수만 조회하기, 업데이트하기SELECT * FROM table WHERE id % n = 0UPDATE table SET col = 'true' WHERE id % n =0 2. 테이블에 시퀀스(행번호, ID)가 없을 때 임시로 행번호를 만들고, 그 후에 n의 배수만 조회하기, 업데이트하기 SELECT * FROM table A INNER JOIN (SELECT ROW_NUMBER() over (order by aaa) as rownum, aaa, bbb, ccc, ddd FROM table) B on B.aaa = A.aaa and B.bbb = A.bbb and B.ccc =A.ccc and B.ddd = A.dddWHERE B.rown..
-
MSSQL UNION과 정렬Database/MSSQL 2017. 5. 26. 10:10
A테이블과 B테이블을 합칠 때UNION을 쓰면 A와 B의 중복값을 제거하고 합쳐지고,UNION ALL을 쓰면 A와 B의 중복값을 포함하여 모두 합쳐진다.이때 중요한 포인트는 A테이블과 B테이블의 열 형식이 같아야 한다. A테이블 DeviceTime UserID UserName InOut 2017-05-25 08:50 1001 이씨 IN 2017-05-25 08:30 1002 박씨 IN 2017-05-25 09:00 1003 최씨 IN B테이블 DeviceTime UserID UserName InOut 2017-05-25 08:50 1001 이씨 OUT 2017-05-25 08:30 1002 박씨 OUT 2017-05-25 18:00 1003 최씨 OUT A테이블과 B테이블을 합칠 때 - SELECT * ..
-
MSSQL 행번호, Row NumberDatabase/MSSQL 2017. 4. 5. 09:09
MSSQL에서 행번호를 나타내는 방법. 테이블에 IDENTITY 역할을 하는 칼럼이 없거나 만들지 않은 상태에서혹은 행번호를 알 수 있는 칼럼이 따로 없는 경우 (기준이 되는) 특정 칼럼 순서에 따라 행번호(Row Number)를 나타내는 열을 함께 조회하고자 할 때다음과 같이 사용하면 된다. 예시1) SELECT ROW_NUMBER() Over (order by ID) FROM table 예시2) SELECT ROW_NUMBER() Over (order by regDateTime) as 'RowNumber' FROM table 예시3) SELECT ROW_NUMBER() Over (order by regDateTime) as 'RowNumber', column1 FROM table