본문 바로가기

DBMS/SQL Server

(95)
[SQL Server] sp_depends 갱신하기 sp_depends 시스템 저장 프로시저를 사용하여 참조하는 개체를 확인하려고 할 때 참조하는 개체가 있음에도 참조하는 개체가 없다는 메시지가 뜨는 경우가 있다. 개체의 정의가 변경된다고 해서 이 개체를 참조하는 스토어드 프로시저, 사용자 정의 함수, 뷰의 메타데이터는 자동으로 갱신되지 않기 때문이다. sp_refreshsqlmodule 시스템 저장 프로시저를 사용하여 갱신하면 참조하는 개체를 확인할 수 있다. -- 테스트 프로시저 생성 CREATE PROC USP_TEST AS SELECT * FROM TEST_TBL GO -- 참조하는 개체 확인 EXEC sp_depends USP_TEST GO -- 테스트 테이블 생성 CREATE TABLE TEST_TBL ( ID INT ) GO -- 참조하는 개..
[SQL Server] 사용자 정의 데이터 형식 (User Defined data Type) 데이터 형식은 SQL Server에서 자체적으로 지원하는 데이터 형식을 사용하는 것과 사용자가 시스템에서 제공하는 데이터 형식을 이용하는 것 두가지로 나눌 수 있다. 시스템에서 제공되는 데이터 형식은 대부분이 스칼라 데이터 형식(Scalar types) 이다. 스칼라 값은 리터럴 값이라고도 불리며, 일반적으로 문자나 숫자와 같은 상수 값을 지칭한다. 이와는 반대로 사용자 정의 데이터 형식(UDT, User Defined data Type)은 논리적인 데이터 형식이다. 시스템 데이터 형식을 규정하여 이를 자신만의 특별한 데이터 형식으로 별명을 붙여 사용한다. 사용자 정의 데이터 형식은 'sp_addType' 이라는 저장 프로시저를 사용해서 등록할 수 있고, 'sp_dropType' 저장 프로시저를 이용해서..
[SQL Server] 클러스터 구성 여부 DB에서 확인하기 서버 인스턴스가 장애조치(Failover) 클러스터에 구성되었는지 확인하려면 SELECT SERVERPROPERTY('IsClustered') 0을 반환하면 클러스터가 구성되지 않은 것이고, 1을 반환하면 클러스터가 구성된 것이다. 참고 : http://technet.microsoft.com/ko-kr/library/ms174396.aspx
[SQL Server] sp_MSforeachdb 활용하기 sp_MSforeachdb 프로시저는 모든 데이터베이스 이름으로 지정한 명령을 수행하는 프로시저이다. master 데이터베이스에 있으며, BOL(Books Online)에 문서화 되지 않은 프로시저이다. 이 프로시저를 다음과 같이 활용할 수 있다. 인스턴스 내에 있는 모든 데이터베이스에 대한 이름 확인 EXEC sp_MSforeachdb 'USE ?; SELECT DB_NAME()' 인스턴스 내의 모든 데이터베이스의 helpfile 정보 확인 EXEC sp_MSforeachdb 'USE ?; EXEC sp_helpfile' 인스턴스 내의 모든 데이터베이스에서 특정 컬럼이름을 포함하는 테이블 찾기 -- 컬럼이름 STATUS를 포함하는 테이블 찾기 EXEC sp_MSforeachdb 'SELECT * FRO..
[SQL Server] 강제로 IDENTITY 값 입력하기 IDENTITY 속성을 테이블에 지정하면 자동으로 증가하는 값을 입력해준다. 자주 삭제되는 테이블에 ID 열이 있는 경우 ID 값 사이에 간격이 생길 수 있다. 기존 간격을 채우려면 SET IDENTITY_INSERT 를 ON으로 설정하고 명시적 값을 테이블의 ID 열에 삽입할 수 있다. CREATE TABLE TEST_TBL ( ID INT IDENTITY NOT NULL PRIMARY KEY , NAME VARCHAR(10) , AGE INT ) GO INSERT INTO TEST_TBL(NAME, AGE) VALUES ('한효주', 27), ('배수지', 20) , ('한지민', 32), ('구하라', 23) -- 데이터 확인 SELECT * FROM TEST_TBL -- 데이터 삭제 DELETE ..
[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..