본문 바로가기

SQL Server

(82)
[SQL Server] 길이를 명시하지 않고 문자열을 선언한 경우 길이를 명시하지 않고 문자열을 선언하면 그 길이는 얼마로 적용될까? 문자열 변수를 선언하면서 길이를 명시하지 않은 경우 CHAR, VARCHAR, NCHAR, NVARCHAR 데이터 형식에 길이를 명시하지 않고 테스트 해보았다. 결과를 보면 문자열 변수를 선언하면서 길이를 명시하지 않으면, 길이는 1로 정해지는 것을 확인할 수 있다. DECLARE @A CHAR = 'DATA' DECLARE @B CHAR = '데이터' DECLARE @C VARCHAR = 'DATA' DECLARE @D VARCHAR = '데이터' DECLARE @E NCHAR = 'DATA' DECLARE @F NCHAR = '데이터' DECLARE @G NVARCHAR = 'DATA' DECLARE @H NVARCHAR = '데이터..
[SQL Server] SELECT 절에 대부분의 컬럼을 명시해야할 경우 테이블이나 뷰의 모든 컬럼을 사용하는 경우는 거의 없다. SELECT * 을 사용하게 되면 불필요한 스캔 연산이나 조회 연산이 발생한다. 즉 커버링 인덱스(Covering Index) 만으로 충분한 쿼리의 요청을 처리할 수 있음에도 불구하고, 더 많은 리소스를 사용해서 쿼리를 처리해야 할 수도 있다. 그럼에도 불구하고 모든 컬럼이나 대부분의 컬럼을 명시해야할 경우 다음과 같이 편하게 할 수 있다. 1. 개체 탐색기에서 테이블을 열고 열 폴더를 클릭 2. 클릭한 열 폴더를 마우스로 원하는 위치의 편집창에 끌어 놓으면 아래와 같이 모든 컬럼이 붙게 된다. SELECT au_id, au_lname, au_fname, phone, address, city, state, zip, contract FROM dbo...
[SQL Server] 데이터베이스 복원 작업 정보 보기 데이터베이스 복원 작업과 관련된 정보는 msdb 데이터베이스의 restorehistory 테이블에 저장된다. 복원 작업의 완료 날짜 및 시간, 대상 데이터베이스, 작업을 수행한 사용자를 확인하려면 다음과 같다. SELECT restore_date, destination_database_name, user_name FROM msdb.dbo.restorehistory 각 컬럼에 대한 내용은 다음과 같다. restoer_date : 복원 작업 완료 날짜 및 시간 destination_database_name : 복업 작업용 대상 데이터베이스 이름 user_name : 복원 작업을 수행한 사용자 이름 restorehistory 테이블의 모든 열에 대한 정보를 확인하려면 http://msdn.microsoft.c..
[SQL Server] 테이블명, 컬럼명 변경하기 테스트용 테이블을 생성하고 테이블명을 변경 테이블명 변경 : SP_RENAME '현재 테이블명', '변경할 테이블명' -- 테스트용 테이블 생성 CREATE TABLE TEST_RENAME ( COL1 INT , COL2 CHAR(5) ) -- 테이블명 변경 SP_RENAME 'TEST_RENAME', 'TEST_RE' 테이블명이 제대로 변경되었는지 확인 TEST_RENAME 테이블을 SELECT 하면 TEST_RE로 변경되었으므로 오류메시지가 발생한다. 변경된 TEST_RE 테이블을 SELECT 하면 정상적으로 결과가 출력된다. -- 테이블명 변경 확인 SELECT * FROM TEST_RENAME -- 테이블명 변경 확인 SELECT * FROM TEST_RE 컬럼명 변경 : SP_RENAME '테이..
[SQL Server] 특정 일자의 요일 구하기 특정 일자의 요일을 구하고 싶을 때 다음의 함수를 사용하면 된다. -- 한글로 요일 구하기 SELECT DATENAME (WEEKDAY, '20130730') -- 숫자로 요일 구하기 SELECT DATEPART (WEEKDAY, '20130730') 실행 결과를 확인해 보면 2013년 7월 30일은 화요일인 것과 숫자로는 3인 것을 알 수 있다. 여기서 주의할 점은 일요일이 1을 나타내고 월요일이 2 수요일이 3.... 토요일이 7을 나타낸다. 조금 응용해서 일요일에만 특정 데이터를 보여주고 싶을 때 다음과 같이 조건을 주면 된다. IF DATEPART(WEEKDAY, GETDATE()) = 1 BEGIN SELECT '일요일 입니다.' END ELSE BEGIN SELECT '일요일 아닌데...' E..
[SQL Server] 데이터, 로그 파일 사이즈 자동증가 확인 데이터베이스에서 파일 자동증가 옵션은 설치시 기본으로 적용되어 있는 기능으로 디스크에 저장공간이 부족하게 되면 자동증가 크기만큼 크기를 증가시켜 여유공간을 확보하게 된다. 자동증가시 부하로 인해 서비스중인 시간에 자동증가가 발생하지 않도록 미리 여유공간을 확보해야 한다. 그렇다고 자동증가 옵션을 설정하지 않는다면 데이터 파일의 저장공간이 부족한 경우 더 이상 데이터를 저장할 수 없고 이로 인해 심각한 장애가 발생할 가능성이 있다. 데이터, 로그 파일이 언제 자동증가 했고, 자동증가시 걸린 시간, 크기 등을 확인하는 방법은 다음과 같다. [보고서] ▶ [표준 보고서] ▶ [디스크 사용] 데이터, 로그 파일이 자동증가로 증가했는지 확인할 수 있다. 이벤트, 논리적 파일 이름, 시작시간, 기간, 변경된 크기에..
[SQL Server] 테이블 스크립팅시 인덱스 포함하기 기본적으로 테이블을 스크립팅 하면 PK나 FK를 제외한 인덱스는 포함되지 않고 스크립팅 된다. 인덱스를 포함해서 스크립팅 하려면 도구 - 옵션 - SQL Server 개체 탐색기 - 스크립팅에서 인덱스 스크립팅을 True로 바꿔주면 된다.
[SQL Server] MERGE 문 SQL Server 2008에서 제공하는 MERGE 문은 하나의 쿼리 문으로 INSERT, UPDATE, DELETE 작업을 할 수 있다. 일반적으로 두 개의 테이블을 비교해서 한쪽 테이블에 없으면 INSERT, 있으면 UPDATE하는 형태로 많이 사용한다. MERGE 문은 UPDATE + INSERT의 의미로 UPSERT라고 부르기도 한다. USE TestDB GO -- 테스트를 위해 테이블 생성 CREATE TABLE dbo.TestTbl ( COL1 INT IDENTITY(1,1) NOT NULL , COL2 INT NOT NULL , COL3 CHAR(6) ) GO -- 데이터 삽입 INSERT INTO dbo.TestTbl (COL2, COL3) VALUES (1, '한효주'), (2, '아이유..