본문 바로가기

DBMS/SQL Server

(95)
[SQL Server] GO 명령의 깜찍한 기능 Transact-SQL 문의 스크립트를 작성할 때 GO를 사용하며 일괄 처리의 끝을 알린다. 이 기능 외에 GO 명령 옆에 숫자를 적으면 그 숫자 횟수만큼 실행된다. 구문 GO [count] 인수 count 양의 정수입니다. GO 앞의 일괄 처리가 지정된 횟수만큼 실행됩니다. CREATE TABLE DBO.TEST_TBL ( COL1 INT , COL2 INT ) GO -- 지정된 횟수인 10번 만큼 INSERT 문을 실행한다. INSERT INTO DBO.TEST_TBL VALUES (1,2) GO 10 -- INSERT 문이 10번 실행되었는지 확인 SELECT * FROM DBO.TEST_TBL -- 2번의 SELECT 문을 실행한다. SELECT * FROM DBO.TEST_TBL GO 2 깜찍한..
[SQL Server] DELETE, TRUNCATE의 IDENTITY 초기화 여부 테이블의 구조는 남기고 모든 데이터를 지워야 할 경우 DELETE와 TRUNCATE를 사용할 수 있다. 이 때 테이블에 IDENTITY 속성이 있고 데이터는 지우되 다시 데이터를 입력할 때 이전에 사용하던 IDENTITY 값을 이어서 사용하고 싶으면 어떤 것을 사용해야할까? CREATE TABLE TEST_1 ( NUM INT IDENTITY (1,1) , NAME CHAR(6) ) GO CREATE TABLE TEST_2 ( NUM INT IDENTITY (1,1) , NAME CHAR(6) ) GO INSERT INTO TEST_1 VALUES ('아이유'), ('배수지'), ('강민경') INSERT INTO TEST_2 VALUES ('아이유'), ('배수지'), ('강민경') GO -- IDEN..
[SQL Server] NULL의 크기 SQL Server에서 NULL의 크기는 가장 큰 값일까 가장 작은 값일까? 테이블에 NULL 값을 넣고 정렬을 통해 NULL의 크기를 알아보자. CREATE TABLE TEST_NULL ( TEST INT ) GO INSERT INTO TEST_NULL VALUES (1), (10), (15), (90), (100), (NULL), (150) GO -- TEST 컬럼 오름차순으로 정렬 SELECT * FROM TEST_NULL ORDER BY TEST ASC NULL 값이 저장된 컬럼을 오름차순으로 정렬해 보았다. 결과에서 보는바와 같이 SQL Server에서의 NULL 값은 가장 작은 값임을 확인할 수 있다. 반대로 오라클에서는 NULL이 가장 큰 값이다.
[SQL Server] 유일한 값을 찾는 다양한 방법 가끔 여러 개의 값들 중 중복된 값을 제외한 유일한 값을 찾아야 할 때가 있다. 이 경우 DISTINCT 키워드를 주로 사용한다. 그러나 유일한 값을 찾는 방법은 많다. -- 테스트를 위해 테이블 생성 CREATE TABLE #SALES_DETAILS ( SALES_ID INT IDENTITY(1,1) , ITEM_ID INT NOT NULL , QTY INT NOT NULL , UNIT_PRICE DECIMAL(12,2) NOT NULL , SALES_DATE DATETIME NOT NULL ) GO -- 데이터 삽입 INSERT INTO #SALES_DETAILS (ITEM_ID,QTY,UNIT_PRICE,SALES_DATE) SELECT 1001,5,200,'2012-09-03 11:16:28' U..
[SQL Server] 랜덤 출력 NEWID 함수 NEWID() : UNIQUEIDENTIFIER 형식의 고유 값을 만든다. SELECT NEWID() 를 실행시켜보면 73F48BE7-21F5-4B4C-9491-F348C26F9F85 이러한 값이 랜덤으로 나오는 것을 확인할 수 있다. 그리고 ORDER BY 절과 같이 사용하게 되면 순서를 랜덤으로 출력해준다. 예를들어 온라인으로 책을 파는 사이트가 있다. 10권의 추천도서가 있고 랜덤하게 3권씩 보여주고 싶을 때 NEWID 함수를 이용해보자. -- 테이블 생성 CREATE TABLE dbo.RECOMMEND_BOOKS ( NUM INT IDENTITY , BOOK_NAME VARCHAR(50) ) GO -- 10권의 추천도서 등록 INSERT INTO dbo.RECOMMEND_BOOKS VALUES (..
[SQL Server] 에러 메시지를 원하는 언어로 변경하기 해외 서버에서 작업을 하다보면 한글이 아닌 그 나라의 언어를 사용하는 경우가 있다. 특히 중국이나 대만 서버에서 작업을 할 때 한문이 나오면 정신이 혼미해진다. 에러 메시지를 원하는 언어로 변경하여 보자. 에러 메시지를 한문으로 보여주고 있다. 다음 명령어를 실행 후 확인해보면 에러메시지가 지정한 언어로 나오는 것을 볼 수 있다. -- 한국어 SET LANGUAGE KOREAN GO -- 영어 SET LANGUAGE ENGLISH GO -- 일본어 SET LANGUAGE JAPANESE GO -- 설정할 수 있는 언어가 저장된 테이블 SELECT * FROM MASTER.DBO.SYSLANGUAGES GO SET LANGUAGE는 권한에 제약이 없고, 현재의 세션에서만 적용된다. 참고 : http://m..
[SQL Server] FULL SCAN 하는 SP 찾기 XML플랜을 이용하여 캐시된 플랜 중 FULL SCAN 하는 SP를 찾는 방법에 대해 소개합니다. [성능 모니터 – FULL Scans/Sec] 위와 같이 운영하고 있는 서버에서 많은 FULL SCAN 수치가 보인다면, 해당 서버는 성능적으로 문제가 발생할 가능성이 있다고 생각해 볼 수 있습니다. 그렇다면 빠르고 쉽게 FULL SCAN하는 쿼리를 찾아 수정 하여야 할 것 입니다. 하지만, 기본적인 DMV로는 인덱스에 대한 SCAN 수에 대해서는 확인 할 수 있지만, SP에 대해서는 SCAN 여부 조차 확인 할 수 없습니다. 그래서 DMV로 확인 할 수 있는 XML플랜을 XQUERY를 사용하여 찾아보는 쿼리를 만들어 보았습니다. with XMLNAMESPACES ('http://schemas.microso..
[SQL Server] 모든 테이블의 Row Count 구하기 COUNT 함수를 사용하지 않고 모든 테이블의 Row Count 구하기 보통 테이블의 Row Count를 구하기 위해서 SELECT COUNT(*) FROM TABLE 과 같이 COUNT 함수를 사용해서 Count를 구하게 된다. 데이터베이스 내의 모든 테이블의 Row Count 가 필요할 때 일일이 COUNT 함수를 사용하여 Row Count를 구할 수도 있지만 COUNT 함수를 사용하지 않고 한번에 모든 테이블의 Row Count 를 구해보자. SELECT T.NAME [TABLENAME], SUM(ST.ROW_COUNT)[ROWCOUNT] FROM SYS.TABLES T INNER JOIN SYS.SCHEMAS S ON T.SCHEMA_ID = S.SCHEMA_ID INNER JOIN SYS.IND..