Database/MSSQL
-
MSSQL Datetime formatsDatabase/MSSQL 2018. 10. 15. 09:17
출처: https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/ Date and Time Conversions Using SQL Serverwww.mssqltips.com 아래 표에는 없는 형식 변환법 (한국식 날짜 변환)Select Convert(varchar, getdate(),121) => 2016-04-05 09:28:25.003Select Convert(varchar(10), getdate(),121) => 2016-04-05Select Convert(varchar, getdate(), 120) => 2016-04-05 09:28:25 DATE FORMATSFormat #Query (current..
-
MSSQL SELECT와 UPDATE 동시에 하기Database/MSSQL 2018. 10. 2. 11:51
프로그램 내에서데이터를 select하여 가져온 다음에 row 하나씩 작업을 처리한 후 row 하나를 update를 하는 과정이처리속도가 오래 걸리는 문제가 있었다. select한 데이터는 플래그만 바꿔주면 되는 간단한 문제인데 처리속도가 느려서 그 뒤에 작업들도 너무 오래 걸린다. 방법을 달리하였다.update를 프로그램이 수행을 하여 느려진 것이니데이터베이스 자체에서, 쿼리에서 처리가 되도록 하는 방법을 생각했다.MSSQL은 저장프로시저가 있으니 저장프로시저에서 작업이 일어나고프로그램에선 프로시저를 실행해 데이터만 가져오면 된다. 1. 임시테이블을 만든다.declare @AAA table ([CreateDate] [datetime] NOT NULL, [UserID] [varchar](8) NOT NUL..
-
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 * ..