본문 바로가기

DBMS/SQL Server

(95)
[SQL Server] OBJECT_ID 함수를 이용한 개체 존재 여부 확인 OBJECT_ID 함수를 이용해서 개체의 존재 여부를 확인 후 개체를 삭제해 보자. 오라클의 경우 CREATE OR REPLACE 를 사용하면 CREATE 할 때 기존에 같은 이름의 개체가 있으면 REPLACE 하고 개체가 없으면 CREATE 하는 기능이 있지만 MS SQL Server 에는 없다. 테이블에 개체 ID가 있는지 확인해서 지정한 테이블이 있는지 확인한다. 테이블이 있는 경우 삭제되고, 테이블이 없는 경우 DROP TABLE 문이 실행되지 않는다. USE AdventureWorks2008R2; GO IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL DROP TABLE dbo.AWBuildVersion; GO OBJECT_ID 함수 내의 dbo...
[SQL Server] where 절에서는 별칭(alias)을 사용할 수 없다. where 절에서는 별칭(alias)을 사용할 수 없다. 하지만 order by 절에서는 별칭뿐 아니라 컬럼의 순서에 해당하는 숫자도 사용할 수 있다. CREATE TABLE dbo.ALIAS_TEST ( NUM INT IDENTITY(1,1) , NAME CHAR(6) ) INSERT INTO dbo.ALIAS_TEST VALUES ('BANANA') INSERT INTO dbo.ALIAS_TEST VALUES ('ORANGE') INSERT INTO dbo.ALIAS_TEST VALUES ('APPLE') -- 별칭을 사용하면 열 이름이 잘못 되었다는 오류 발생 SELECT NUM, NAME AS N FROM dbo.ALIAS_TEST WHERE N = 'BANANA' -- 검색 가능 SELECT N..
[SQL Server] 산술 오버플로 오류 expression을(를) 데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다. int형의 범위를 초과하여 발생한 경우로 더 큰 데이터 형식(bigint)으로 변환하면 문제가 해결된다. -- INT형 컬럼을 가진 테이블 생성 CREATE TABLE TEST ( COL1 INT NOT NULL IDENTITY(1,1) , COL2 INT ) -- 데이터 삽입(두 값을 SUM 하였을 경우 INT형의 범위를 초과하게 삽입) INSERT INTO TEST VALUES ('2000000000'), ('2000000000') -- 두 값을 SUM 하였을 경우 산술 오버플로 오류 확인 SELECT SUM(COL2) FROM TEST -- CONVERT나 CAST로 INT형을 BIGINT형으로 변..
[SQL Server] Index Depth 확인하기 Index Depth 확인하기 -- 테이블 생성 CREATE TABLE DBO.TEST_INDEXDEP ( COL1 CHAR(20) , COL2 CHAR(800) ) GO SET NOCOUNT ON DECLARE @I INT = 1 WHILE(@I
[SQL Server] SET 문 SET(Transact-SQL) 특정 정보를 처리하는 현재 세션을 변경할 수 있는 몇 가지 SET 문을 제공 날짜 및 시간 문 SET DATEFIRST 일주일의 첫 번째 요일을 1부터 7까지의 숫자로 설정 SET DATEFORMAT datetime 또는 smalldatetime 데이터 입력에 대한 날짜 부분의 순서(월/일/년도)를 설정 잠금 문 SET DEADLOCK_PRIORITY 현재 세션이 다른 세션과 교착 상태에 있는 경우 현재 세션이 계속 실행되도록 하는 상대적 중요도를 지정 SET LOCK_TIMEOUT 잠금이 해제될 때가지 문이 기다려야 할 시간(밀리초)을 지정. -1(기본값)은 제한 시간이 없음(무기한 대기) 0은 기다리지 않음을 나타내고 잠금이 있으면 바로 오류 메시지가 반 기타 문 SE..
[SQL Server] 데이터 저장과 관련한 세 가지 프로세스 데이터베이스에서 일어나는 모든 작업(Transaction)은 메모리에서 처리되며, 처리된 내용은 체크 포인트(Check Point), 레이지 라이터(Lazy Writer), 로그 라이터(Log Writer)라는 세가지 프로세스에 의하여 데이터 파일과 로그 파일에 기록된다. 1. 체크 포인트(Check Point) - 체크 포인트 프로세스는 현재까지 메모리에서 진행된 모든 내용을 데이터 파일과 로그 파일에 기록하는 프로세스 - 비주기적으로 발생, 수동으로 개발자가 발생시킬 수도 있음 2. 레이지 라이터(Lazy Writer) - 레이지 라이터 프로세스는 메모리 상의 프로시저 캐시에서 사용 빈도가 낮은 실행 계획을 메모리에서 제거하고 버퍼 캐시에 있는 더티 페이지(Dirty Page)들을 디스크에 기록함으로..
[SQL Server] 여러 개의 스크립트 한 번에 생성하기 테이블이나 프로시저의 스크립트를 생성할 때 개체 탐색기에서 필요한 테이블이나 프로시저를 한 개씩 마우스 오른쪽 클릭 -> 테이블 스크립팅 - > CREATE 이런식으로 스크립트를 생성하였었다. 개체 탐색기에서는 여러 개가 선택되지 않았으므로... 하지만 요약 탭을 이용하면 여러 개의 스크립트를 한 번에 생성할 수 있다. 1. SSMS 실행 2. 요약 탭 선택 (F7) 3. 작업할 데이터베이스 더블 클릭 4. 테이블 항목을 더클 클릭하면 테이블 리스트가 보임 5. 스크립트 생성할 개체를 선택 (여러개 선택 가능) 6. 마우르 오른쪽 클릭하고 테이블 스크립팅을 선택 7. CREATE 를 선택 8. 쿼리 편집기창, 파일, 클립보드 중 하나를 선택하면 스크립트가 생성됨
[SQL Server] 중복된 Row 제거하기 이미 데이터가 저장된 테이블에 Primary Key나 Unique 인덱스를 만들고 싶지만 중복된 로우가 있으면 에러가 발생한다. 이럴경우 중복된 Row를 제거하여 보자. -- 테스트를 위해 테이블을 생성 CREATE TABLE dbo.TEST_TBL ( NUM INT NOT NULL , ID VARCHAR(32) NOT NULL ) GO -- 중복된 데이터를 삽입 INSERT INTO dbo.TEST_TBL (NUM, ID) VALUES (1, 'APPLE'), (2, 'BANANA'), (2, 'GRAPE') GO /* Primary Key 제약조건추가 NUM 컬럼은 중복된 값을 가지고 있으므로 오류가 발생*/ ALTER TABLE dbo.TEST_TBL ADD CONSTRAINT PK_TEST_TBL..