SQL Server 2008을 사용하고 있으며 약 500k 행이있는 테이블에서 VARCHAR 필드를 (200에서 1200) 더 크게 만들어야합니다. 내가 알아야 할 것은 내가 고려하지 않은 문제가 있는지 여부입니다.
이 TSQL 문을 사용할 것입니다.
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
나는 이미 데이터 사본에 대해 시도해 보았고이 진술은 내가 볼 수있는 나쁜 영향을 미치지 않았습니다.
그래서 내가 고려하지 않았을 가능성이있는 문제가 있습니까?
그건 그렇고, 열은 인덱싱되지 않습니다.
답변
이는 메타 데이터 변경 일 뿐이며 빠릅니다.
관찰 : SET ANSI_xx 설정 중 하나가 다른 경우 “사고”를 피하기 위해 명시 적으로 NULL 또는 NOT NULL을 지정합니다. 예를 들어 어떤 이유로 SSMS가 아닌 osql에서 실행
답변
이 질문을 검색했기 때문에 2 센트를 추가하고 싶었습니다. b / c 비슷한 상황에 처해있었습니다.
인식 에서 변경하는 동안 것을 varchar(xxx)
하는 것은 varchar(yyy)
참으로 메타 데이터 변경,하지만에 변경하는 것은 varchar(max)
아니다. 때문에 varchar(max)
값 (BLOB 값 일명 – 이미지 / 텍스트 등) “행에서”하지 테이블 행 내에서 디스크에 다르게 저장되지만. 따라서 서버는 큰 테이블에서 열광하고 몇 분 (시간) 동안 응답하지 않습니다.
--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)
--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
추신. nvarchar
또는 코스 에도 동일하게 적용됩니다 .
답변
Varchar (200)에서 Varchar (1200)로 변경하면 메타 데이터 변경 일 뿐이므로 문제가 발생하지 않으며 SQL Server 2008이 과도한 공백을 자르기 때문에 성능 차이가 없어야합니다. 변화.
답변
열을 varchar (max)로 변환하지 않아야하는 또 다른 이유는 varchar (max) 열에 인덱스를 만들 수 없기 때문입니다.
답변
제 경우에는 alter column이 작동하지 않았으므로 다음과 같이 ‘Modify’명령을 사용할 수 있습니다.
alter table [table_name] MODIFY 열 [column_name] varchar (1200);