출처 : MS TechNet

http://technet.microsoft.com/ko-kr/library/ms188048.aspx


구문

SET ANSI_NULLS { ON | OFF }

 

SET ANSI_NULLS 옵션이 ON인 경우, WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 Null 값이 있을 때도 0행을 반환합니다. WHERE column_name <> NULL을 사용하는 SELECT 문은 column_name에 Null이 아닌 값이 있을 때도 0행을 반환합니다.

 

SET ANSI_NULLS 옵션이 OFF면 Equals(=)와 Not Equal(<>) 비교 연산자가 ISO 표준을 따르지 않습니다. WHERE column_name = NULL을 사용하는 SELECT 문은 column_name에 Null 값이 있는 행을 반환합니다. WHERE column_name <> NULL을 사용하는 SELECT 문은 열에 Null이 아닌 값이 있는 행을 반환합니다. 또한 WHERE column_name <> XYZ_value를 사용하는 SELECT 문은 XYZ_value가 아니고 NULL이 아닌 모든 행을 반환합니다.

 

계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때는 SET ANSI_NULLS 옵션도 ON으로 설정해야 합니다. SET ANSI_NULLS 옵션이 OFF면 계산 열 또는 인덱싱된 뷰에 인덱스가 있는 테이블의 CREATE, UPDATE, INSERT 및 DELETE 문이 실패합니다. SQL Server는 필요한 값을 위반하는 모든 SET 옵션이 나열된 오류를 반환합니다. 뿐만 아니라 SELECT 문 실행 시 SET ANSI_NULLS 옵션이 OFF면 SQL Server는 계산 열이나 뷰의 인덱스 값을 무시하고 테이블이나 뷰에 이러한 인덱스가 없는 것처럼 SELECT 작업을 처리합니다.

 

DB생성시나 프로시저 작성 전에 꼭 선언해 주도록 하자.

계산된 열 또는 인덱스된 뷰에서 인덱스를 만들거나 변경할 때도 필수~

 

Example >>

원본 테이블

 

ANSI_NULLS ON 설정시 (0 행을 반환)

select * from test where col2=null

 

ANSI_NULLS OFF 설정시 (Null행을 반환)

select * from test where col2=null

 

'개발 > DB' 카테고리의 다른 글

MS-SQL 문법정리  (0) 2015.03.05
프로시저 기본 문법  (0) 2015.03.05
MS SQL 저장 프로시저  (0) 2015.03.02
join query image  (0) 2015.01.29
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13

'개발 > DB' 카테고리의 다른 글

프로시저 기본 문법  (0) 2015.03.05
SET ANSI_NULLS  (0) 2015.03.05
join query image  (0) 2015.01.29
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13
날짜 쿼리  (0) 2014.06.12

 

 

'개발 > DB' 카테고리의 다른 글

SET ANSI_NULLS  (0) 2015.03.05
MS SQL 저장 프로시저  (0) 2015.03.02
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13
날짜 쿼리  (0) 2014.06.12
DB 쿼리 기초  (0) 2014.06.12
MS-SQL DB잠겼을때 exec sp_lock 방법 안내

 

DB가 갑자기 느려졌을 경우에 확인 할 수 있는 방법 중 하나 입니다.

우선적으로

잠기는 종류가 크게 두가지로 나뉩니다.

 

공유잠금(shared lock)과 배타적 잠금(exclusive lock) 으로 나뉘어요.

전 lock 프로시저를 활용하는 방법으로 안내 해드리겠습니다.

 

아래와 같이  exec sp_lock 쿼리로 lock 정보를 확인하실 수 있습니다.

보통 spid 가 중복으로 여러개 붙은 것들은 kill 해주시면 되긴하지만

MODE의 값을 확인하고 KILL 시키면 더 좋겠죠?

 

1. 아래 컬럼값들에 대해 설명 해드리도록 하겠습니다.

 

SPID 

->잠금을 요청하는 프로세스의 세션ID

DBID

-> 데이터베이스의 식별번호

OBID

-> 개체의 식별번호

INDLD

-> 인덱스의 식별번호

TYPE

-> 잠금유형

RESOURCE

-> 리소스 식별값

MODE

-> 잠금

STATUS

-> 잠금요청상태 

 

 

2. MODE 값 상세 설명

 

S-> 공유 잠금

U-> 업데이트 잠금

X-> 독점 잠금

IS-> 의도 공유

IU-> 의도 업데이트

IX-> 독점 의도

BU-> 대량 업데이트 

 

 

 3. 잠김 값의 수행된 쿼리정보 확인 하는 방법

 

dbcc inputbuffer (spid)

EventInfo 쿼리 정보 나옴

 

 

4. 좀더 정확한 정보를 확인 하는 방법

 

exec sp_who2 spid

 

 

5. 프로시져 죽이는 방법

 

kill (spid)

 

'개발 > DB' 카테고리의 다른 글

MS SQL 저장 프로시저  (0) 2015.03.02
join query image  (0) 2015.01.29
날짜 쿼리  (0) 2014.06.12
DB 쿼리 기초  (0) 2014.06.12
결과값의 특정 행만 출력, WITH, ROW_NUMBER()  (0) 2014.06.12

 

//레이어 아래로 내리기 위한 정보값
 params.wmode = "transparent";

'개발' 카테고리의 다른 글

AWS STS와 Assume Role  (3) 2023.03.14
React useEffect 예제  (0) 2023.03.14
code에서 1.1 + 0.1 == 1.2가 다른 이유  (0) 2023.03.14
유용한 사이트 모음  (0) 2014.06.26

'개발' 카테고리의 다른 글

AWS STS와 Assume Role  (3) 2023.03.14
React useEffect 예제  (0) 2023.03.14
code에서 1.1 + 0.1 == 1.2가 다른 이유  (0) 2023.03.14
flex 화면이 레이어 아래로 내려 갈수 있게  (0) 2014.10.08

1 . GETDATE() 함수  ~~ System 의 현재 설정된 날짜값 반환

        SELECT GETDATE()
        2009-02-17 11:48:53.873

        SELECT GETDATE()+100
        2009-05-28 11:49:00.670

2 . CONVERT() 함수  ~~  결과값의 데이타 타입을 변환
 
        SELECT CONVERT(varchar(30), GETDATE(),100)
        02 17 2009 11:49AM

        SELECT CONVERT(varchar(30), GETDATE(),101)
        02/17/2009

        SELECT CONVERT(varchar(30), GETDATE(),102)
        2009.02.17

        SELECT CONVERT(varchar(30), GETDATE(),103)
        17/02/2009

        SELECT CONVERT(varchar(30), GETDATE(),104)
        17.02.2009

        SELECT CONVERT(varchar(30), GETDATE(),105)
        17-02-2009

        SELECT CONVERT(varchar(30), GETDATE(),106)
        17 02 2009

        SELECT CONVERT(varchar(30), GETDATE(),107)
        02 17, 2009

        SELECT CONVERT(varchar(30), GETDATE(),108)
        11:49:49

        SELECT CONVERT(varchar(30), GETDATE(),109)
        02 17 2009 11:49:54:437AM

        SELECT CONVERT(varchar(30), GETDATE(),110)
        02-17-2009

        SELECT CONVERT(varchar(30), GETDATE(),111)
        2009/02/17

        SELECT CONVERT(varchar(30), GETDATE(),112)
        20090217

        SELECT CONVERT(varchar(30), GETDATE(),113)
        17 02 2009 11:50:24:857

        SELECT CONVERT(varchar(30), GETDATE(),114)
        11:50:32:217

 

3 . DATEPART() 함수  ~~ 날짜에서 지정한 날짜형식 부분만 반환

        형식: DATEPART(날짜형식, 날짜)

        년/월/일/시/분/초/요일을 숫자 형식으로 ...
       
        SELECT DATEPART(yy, GETDATE())
        2009

        SELECT DATEPART(mm, GETDATE())
        2

        SELECT DATEPART(dd, GETDATE())
        17

        SELECT DATEPART(hour, GETDATE())
        11

        SELECT DATEPART(mi, GETDATE())
        50

        SELECT DATEPART(ss, GETDATE())
        58

        SELECT DATEPART(dw, GETDATE())
        3

 4 . YEAR() , MONTH() , DAY() 함수    ~~  해당 년,월,일을 각각 반환
        형식: YEAR(날짜) , MONTH(날짜) , DAY(날짜)

        SELECT YEAR(GETDATE())
        2009

        SELECT MONTH(GETDATE())
        2

        SELECT DAY(GETDATE())
        17

 5 . DATEADD() 함수  ~~  DATEADD함수는 날짜에 지정한 만큼을 ADD
        형식: DATEADD(날짜형식, 더할 값, 날짜)

        SELECT DATEADD(mm,20,GETDATE())
        2010-10-17 11:52:22.920 ~~ 현재날짜에 월에 20을 더한 날짜를 반환        
      
        SELECT DATEADD(dd,100,GETDATE())
        2009-05-28 11:52:31.653 ~~오늘부터 100일 후의 날짜를 반환      


  6 . DATEDIFF() 함수   ~~   DATEDIFF함수는 두 날짜사이의 날짜형식에 지정된 부분을 반환
        형식: DATEDIFF(날짜형식, 시작 날자, 끝 날짜)

        SELECT DATEDIFF(dd,GETDATE(),'3000.1.1') ~~ 현재날짜와 3000.1.1일 일수 반환
        361908

         SELECT DATEDIFF(MM,GETDATE(),'2010.1.1') ~~ 현재날짜와 2010.1.1일 일수 반환
        -11

 7 . DATENAME() 함수  ~~  DATENAME함수는 지정한 날짜의 날자형식의 이름으로 반환
        형식: DATENAME(날짜형식, 날짜)   

        SELECT DATENAME(mm,GETDATE())
        02

        SELECT DATENAME(dd,GETDATE())
        17

        SELECT DATENAME(dw,GETDATE())
        화요일

 

 

'개발 > DB' 카테고리의 다른 글

MS SQL 저장 프로시저  (0) 2015.03.02
join query image  (0) 2015.01.29
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13
DB 쿼리 기초  (0) 2014.06.12
결과값의 특정 행만 출력, WITH, ROW_NUMBER()  (0) 2014.06.12
● table 생성
CREATE TABLE test
(
   고객번호 char(10) NOT NULL,
   성명 varchar(20) NOT NULL,
   점수 int NULL,
   메모 text
)
-------------------------
● table 삭제
DROP TABLE TEST
------------------------
● 필드 추가
ALTER TABLE TEST
ADD 주소 VARCHAR(60) NULL
-----------------------
● 필드 삭제
ALTER TABLE TEST
DROP COLUMN 메모
-----------------------
● 키본키 추가
ALTER TABLE TEST
ADD CONSTRAINT PK_ZIPCODE PRIMARY KEY(ZIPCODE)
-----------------------
● select 문
select 출시일, 제목, 감독
from 테이프
where 출시일 between'1999-1-1'and'1999-12-31'
order by 출시일
---------------------------
● between 문
select 출시일, 제목, 감독
from 테이프
where 출시일 between '1999-1-1' and '1999-12-31'
-------------------------
● in문
where 우편번호 IN("12345","32154")
---------------------------
● insert into
insert into test001
values('1','이경은','100','서울','광진구 자양동')
--------------------------------
● update 문
update 테이프
set 대여여부 = 'y'
where 제목 = '송어'
------------------------------
● join 문
select 고객정보,어쩌구,저쩌구.
from 고객정보 inner join 임대정보 on 고객정보.고객번호 = 임대정보.고객번호
------------------------------
● 중복제거
SELECT DISTINCT au_id
FROM titleauthor
---------------------
● 궁극의 조인
Select  top "& page * PageSize & " a.idx, a.content, a.userid, a.regidate, a.reply, a.photo_img, a.score_function, a.score_design, a.score_price, a.score_satisfaction, a.intnum, a.seq, b.intnum, b.seq, b.filename, b.pkgname  From mStoreReview a inner join istoresb b on a.intnum=b.intnum and a.seq=b.seq order by regidate DESC

 

'개발 > DB' 카테고리의 다른 글

MS SQL 저장 프로시저  (0) 2015.03.02
join query image  (0) 2015.01.29
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13
날짜 쿼리  (0) 2014.06.12
결과값의 특정 행만 출력, WITH, ROW_NUMBER()  (0) 2014.06.12

결과값에서 특정 행만 출력하는 방법이다.
EX)1000개의 결과값에서 100번째 행만 보고 싶다면?


WITH문과 ROW_NUMBER()를 사용해보자


ROW_NUMBER()
OVER()와 함께 쓰이며 정해진 정렬 순서로 행마다 숫자를 매길 수 있다.

ROW_NUMBER() OVER(ORDER BY [정렬할 컬럼명] [DESC OR ASC]) AS '열 컬럼명'

 

예시) Title, Writer, Price 세 컬럼이 있는 책 목록 테이블에 행 숫자를 매기고 싶다.

SELECT
ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
Title, Writer, Price
FROM Book

결과값

No/ Title / Writer / Price
 1 / 바보 / 홍길동 / 2000
 2 / 공책 / 자운영 / 4000
 3 / 소설 / 소설가 / 6000
....
....
....


 자 그럼 이 결과값에 No이라는 컬럼이 들어가보이니 위에 WHERE No = 3 하면 3번째 행만 나올거라고 나는 생각했다!

근데(당연한 얘기지만) 결과값을 테이블로 보지는 않는데다 Book 테이블에는 No 컬럼이 없으므로 에러가 떨어진다.


여기서 WITH문으로 결과값 자체를 임시로 테이블로 인식하게끔 해주어야 한다.

WITH문
위에도 말했듯 결과값을 임시 테이블로 만들어줌

 - WITH 임시테이블명 AS
(
    SELECT 어찌고 FROM 테이블명
)

 

자 그럼 BookTemp 라는 No 컬럼이 포함된 임시 테이블을 만들어보고
WHERE문으로 3번째 행만 뽑아내보자.


WITH BookTemp AS
 (
  SELECT
  ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
  Title, Writer, Price
  FROM Book
 )
SELECT *
 FROM BookTemp
 WHERE No = 3


결과값
No/ Title / Writer / Price
3 / 소설 / 소설가 / 6000


여러개의 결과값을 뽑아내고 싶다면 WHERE문에 IN을 주면 되겠지?
WHERE No in(3, 6, 9, ...)

 

자 끝

 

 

'개발 > DB' 카테고리의 다른 글

MS SQL 저장 프로시저  (0) 2015.03.02
join query image  (0) 2015.01.29
MS-SQL DB잠겼을때 exec sp_lock 방법 안내  (0) 2015.01.13
날짜 쿼리  (0) 2014.06.12
DB 쿼리 기초  (0) 2014.06.12

+ Recent posts