본문 바로가기

Programming/Microsoft SQL Server

VARCHAR(MAX)나 NVARCHAR(MAX)에 문자열 삽입시 잘림현상에 대해 VARCHAR(MAX)나 NVARCHAR(MAX)는 최대 넣을 수 있는 데이터양이 2GB에 달합니다. 그런데 실제 문자열을 담기를 시도해 보면 2GB에 훨씬 못미치는 VARCHAR(MAX) 8000자 NVARCHAR(MAX) 4000자 밖에 못들어 감을 확인할 수 있습니다. Declare @content VarChar(Max); Set @content = REPLICATE('A', 10000); Select LEN(@content); --결과 8000 이런 경우에는 넣으려는 문자열데이터를 VARCHAR(MAX)나 NVARCHAR(MAX)로 형변환해줘야 합니다. Declare @content VarChar(Max); Set @content = REPLICATE(CAST('A' AS VarChar(Max)).. 더보기
파일그룹에 인덱스생성 후 삭제관련 문제 The filegroup '???" cannot be removed bacause it is not empty. 특정 파일 그룹에 인덱스를 생성한뒤 어떠한 이유에서 해당 인덱스를 삭제한 후 사용중이던 파일그룹더 같이 삭제하려고 하는 경우에 위와 같은 오류를 내면서 파일그룹이 삭제되지 않는 경우가 있습니다. 이런 경우 우선 해당 파일그룹을 사용중인 개체를 확인하도록 합니다. Select t.name as table_name, i.name as index_name, ds.name as data_space_name, ds.type_desc, ps.name as partition_scheme_name From sys.tables t join sys.indexes i On t.object_id = i.object.. 더보기
인덱스(Index) - 1 1. 인덱스 생성 인덱스를 생성하기전 우선 간단한 형태의 테이블을 만들어 보겠습니다. Create Table Items ( item_no Int, item_name nChar(10), item_price Decimal(8, 2), item_description nVarChar(500) ); 인덱스는 다음과 같은 방법으로 생성합니다. Create Clustered Index item_no_idx On Items (item_no); 위 구문은 Items 테이블의 item_no 열에 대해 Clustered 형 인덱스를 생성하도록 합니다. Create 구문에서 Clustered 를 생략하면 기본값인 Nonclustered 인덱스가 생성되며 Unique 를 지정하면 중복값이 없는 인덱스를 생성합니다. 기본값은 중.. 더보기
[SQL] 전체 텍스트 검색 일반적으로 텍스트 검색시 사용하는 쿼리로 Like검색을 들 수 있습니다. Select * From [Sales].[OrderLines] Where [Description] Like '%car%'; 그런데 위와 같은 방식은 테이블스캔작업이 발생되기에 행(Row)이 많으면 원하는 내용을 찾는데 오랜 시간이 소모될 것입니다. 물론 인덱스를 타게 할 수도 있으나 car%와 같은 방법으로 해야만 해서 내용 중간에 'car'가 있는 데이터는 찾을 수 없고 더군다나 무작위의 문자열을 다루는 열(Column)에는 특별한 경우가 아닌이상 인덱스를 걸어놓지 않습니다. 결국 신문기사 검색과 같은 텍스트검색을 위해서는 Like이외에 다른 방법이 필요하게 됐고 보통의 인덱스처럼 열(Column)에 인덱스를 적용하는 것이 아니라.. 더보기
트랜잭션 (Transaction) MS SQL Server에서 데이터베이스(DB)를 생성하면 실제 데이터베이스파일이 만들어 지는데 일부로 변경한 경우가 아니라면 아래와 같은 위치에 파일이 생성될것입니다. C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA 실제 위와 같은 위치로 들어가면 확장자가 mdf인 파일과 ldf인 파일을 확인해 볼 수 있는데, 예를 들어 abc라는 데이터베이스를 생성했다면 abc.mdf와 abc_log.ldf파일이 존재함을 알 수 있습니다. 여기서 mdf는 실제 데이터가 들어가 있는 파일이며 ldf가 트랜잭션로그파일입니다. 이들 파일은 일반적으로는 한개만 존재할 경우가 많지만 필요에 따라 여러개로 나뉘어질 수 있는데 만약 데이터파일이 나뉘어진거.. 더보기
분산 트랜잭션 설정 하나의 MS-SQL 서버에서 다른 MS-SQL서버로 Insert나 Update, Delete작업의 수행시 아래와 같은 메세지를 볼 수 있습니다. [분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다.] 이 문제를 해결하려면 다음 절차를 따라합니다. [Server 2008이상] 1. 시작 -> 실행 에서 'dcomcnfg'를 입력합니다. 2. 구성 요소 서비스 -> 컴퓨터 -> 내 컴퓨터 -> Distributed Transaction Coordinator -> 로컬 DTC를 찾아갑니다. 3. 로컬 DTC에서 마우스 오른쪽 버튼을 눌러 '속성'을 클릭한뒤 '보안'탭에서 다음과 같이 설정합니다. 4. 위와 같은 설정을 통신하는 다른 서버에도 동일하게 적용합니다. 5. 방화벽설정에서 DTC관.. 더보기
[SQL] 기본언어확인및 변경 Select @@LANGUAGE; sp_defaultlanguage 'SA', 'Korean'; -> SA계정으로 접근시 기본언어 한글 더보기
[SQL] 스키마(Schema) 스키마(Schema)는 DB안의 테이블(Table)이나 프로시저(Procedure)등 DB에 등록된 개체들을 효휼적으로 관리하기위한 논리적인 그룹단위에 해당합니다. 예를 들어 원래는 DB안에서 테이블을 명시할때는 다음과 같은 형식으로 해야 합니다. [DB명].[스키마명].[개체명] DB명의 경우 개체를 다루고 있는 DB를 명시하는 것인데 이것은 현재 선택된 DB가 같은 경우 생략이 가능합니다. 스키마명은 대부분 dbo 라는 이름을 많이 볼 수 있는데 이것은 특별한 스키마를 지정하지 않으면 기본적으로 dbo라는 기본스키마가 지정되기 때문입니다. 스키마는 아래와 같은 방법으로 생성합니다. Create Schema MySchema; 스키마를 생성하고 나면 해당 스키마에 소속된 개체를 생성할 수 있게 됩니다. .. 더보기