MSSQL 17

mssql 기본 - TOP

이름이 Table_nm 인 테이블을 조회한다고 하자. DB에 데이터가 많으면 select * from Table_nm 했을 경우 너무오래 걸려서 시스템에 부하가 갈수도 있고 lock을 초래 할 수도 있다. 데이터확인을 위한 단순 select 를 할때는 Top을 사용하는 습관을 들이도록 하자. 사용방법 select TOP 100 * from Table_nm ; select * from Table_nm 했을때의 결과 중 상단 100개만 보여지게 된다. * distinct 구문을 사용할 경우 Top 은 distinct 다음에 와야 하며 그 외에는 select 바로 다음에 와야 한다. 예 ) select distinct Top 100 * from Table_nm ;

Note/DB 2011.09.20

MSSQL 숫자관련함수

ABS ABS함수는 절대값을 나타낸다. 형식: ABS(숫자값) POWER POWER함수는 제곱근을 표현해 준다. 형식: POWER(숫자값, 승수값) SQRT SQRT는 루트값을 표현해준다. 형식: SQRT(숫자값) RAND RAND는 0 에서 1사이의 난수를 발생시킨다. 형식: RAND(초기값) ROUND ROUND는 반올림 함수이다. 형식: ROUND(숫자, 자릿수) CEILING, FLOOR CEILING은 소수점 첫번째 값을 기준으로 올림을 하고 FLOOR는 소수점 첫번째 값을 기준으로 내림을 한다. 형식: CEILING(숫자) ... FLOOR도 동일 CEILING과 FLOOR는 소수 첫번째값이 5 이상이든 이하든간에 무조건 올림, 내림을 수행한다.

Note/DB 2011.09.20

asp 에서 MSSQL 페이징처리

페이징처리는 참.. 귀찮다 -_- 하지만 페이징 처리는 꼭 해봐야 하는 작업이고 꼭 할줄 알아야 하는 작업이다. 대부분의 DB에서 ROW NUMBER 를 알수있는 내장함수를 지원하지만 MSSQL 2000 이하버전에서는 ROWNUMBER 를 알수 없으므로 다른 방법으로 접근해야한다. 물론 여러가지 방법이 있겠지만 본인이 사용해본 방법을 소개해본다. 페이징 처리에는 몇가지 정보가 필요하다. 리스트의 총 레코드갯수, 한페이지에 표시할 레코드 갯수(화면에 보여질 갯수) 총 페이지 갯수, 현재 페이지 번호(보여주어야 할 페이지). // 총 개수 - 리스트 쿼리 SQL = "SELECT count(*) as recordCount FROM HPA010T " SQL = SQL & " WHERE SEQ IS NOT NU..

Note/그밖에 2011.08.22

MSSQL 활성중인 트랜잭션, LOCK 조회 쿼리

/* 활성중인 트랜잭션 조회 */ DBCC OPENTRAN /* Lock TimeOut / default : -1(무제한) */ SELECT @@LOCK_TIMEOUT -- 이걸.. Lock이 걸려도 1800밀리초가 지나면 세션이 끊기도록 설정한다. SET LOCK_TIMEOUT 1800 -- (밀리초 이므로 3분) /* Lock 확인과 Lock 죽이기 (sa권한) */ EXEC sp_lock -- 프로시저 실행하여 mode가 x인 것 확인 dbcc inputbuffer(spid) -- mode가 x인 것의 spid를 입력하면 해당 테이블정보가 출력 kill spid -- 문제가 되는 spid를 kill 한다.

Note/DB 2011.07.26

MSSQL Server Version 확인쿼리

-- 서비스팩 확인 select SERVERPROPERTY('productlevel') -- 사용중인 SQL 빌드넘버와 서비스팩 확인 SELECT 'SQL Server ' + CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - ' + CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' (' + CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')' -- 사용중인 SQL종류와 빌드넘버 select @@version -- 아래의 두개는 똑같은 결과를 보여준다. EXEC sp_server_info EXEC master..xp_msver 위의 쿼리문중 마음에 드는거 실행하면 된다. (모두 결..

Note/DB 2011.07.26

mssql2005 DB상태변경

USE master go -- 응급상태로 전환 (ONLINE | OFFLINE | EMERGENCY) ALTER DATABASE db_name SET EMERGENCY GO -- 데이터베이스의 특성을 살펴봅니다. SELECT DATABASEPROPERTYEX( 'db_name','Status') SELECT name, state, state_desc FROM sys.databases -- 응급상태로 전환하게 되면 읽기전용으로 엑세스가 가능하게됨. dbcc checkdb('db_name') go SELECT * FROM sysdatabases use db_name select * from table_name -- 작업 후 다시 온라인상태로 전환 ALTER DATABASE db_name SET ONLINE GO

Note/DB 2011.07.11

MDF 파일로 복원하기

/*-------------------------------------- MDF 파일로 복원하기 DB_NAME : DB이름 mdf_경로 : mdf파일경로 (D:\db\db_name.mdf 이런식) ldf_경로 : ldf파일경로 (D:\db\db_name.ldf 이런식) --------------------------------------*/ 1.sp_attach_db sp_attach_db @dbname= n'DB_NAME', @filename1 = n'mdf_경로', @filename2 = n'ldf_경로' ; 2.create database DATABASE_NAME for attach create database DB_NAME on (filename = 'mdf_경로'), (filename = 'ld..

Note/그밖에 2011.07.11

형변환 함수 CAST 와 CONVERT

CAST 및 CONVERT : 식을 다른 데이터 형식으로 명시적으로 변환합니다. CAST 및 CONVERT는 비슷한 기능을 제공합니다. 구문 1. CAST 사용 : 오라클, mssql 사용 / sql-92표준) CAST ( expression! AS data_type ) CAST ( '2011-01-01' AS datetime ) -> 2011-01-01 문자열을 datetime형식으로 변환 2. CONVERT 사용 : mssql 만 사용 CONVERT ( data_type [ ( length ) ] , expression! [ , style ] ) CONVERT (varchat(20), getdate()) -> getdate()(현재시각,datetime형식) 을 varchat(20)으로 변환 ** co..

Note/그밖에 2011.07.11

MSSQL 커서(CURSOR) 사용 간단예제

** CURSOR 선언 ⇒ OPEN ⇒ FETCH ⇒ CLOSE ** select 한 결과를 변수에 담아 select 한 결과의 한 row씩 읽어 처리한다. /* 변수 선언 */ DECLARE @rownum int, @seq char(1), /* select 한 컬럼을 담을 변수도 선언해야한다. */ @po_no varchar(30) SET @rownum = 0; /* 커서 선언 */ DECLARE page_cursor CURSOR FOR /* 커서 선언 : page_cursor 라는 이름의 커서를 선언한다. */ SELECT PO_NO, SEQ /* page_cursor 커서를 사용할 테이블을 명시한다. */ FROM POHD WHERE CUST_CD = 'D01428' OPEN page_cursor ..

Note/DB 2011.06.23