SQL Server의 스키마 바운드 뷰에서 참조하는 열 크기 변경


124

다음을 사용하여 SQL Server의 열 크기를 변경하려고합니다.

ALTER TABLE [dbo].[Address]
ALTER COLUMN [Addr1] [nvarchar](80) NULL

의 길이 Addr1는 원래 40.

실패하여 다음 오류가 발생합니다.

The object 'Address_e' is dependent on column 'Addr1'.
ALTER TABLE ALTER COLUMN Addr1 failed because one or more objects access 
this column.

나는 그것을 읽으려고 노력했으며 일부 뷰 가이 열을 참조하고 SQL Server가 실제로 오류를 일으킨 열을 삭제하려고 시도하는 것 같습니다.

Address_e 이전 DB 관리자가 생성 한 뷰입니다.

열 크기를 변경할 수있는 다른 방법이 있습니까?


2
Address_e는 이전 DB 관리자가 생성 한 뷰입니다. Remus가 언급 한 것처럼 SCHEMABINDING이 정의되어 있습니다.
Staelen

답변:


58

뷰는 WITH SCHEMABINDING 옵션을 사용하여 생성 될 수 있으며 이는 이러한 변경을 방지하기 위해 명시 적으로 연결되었음을 의미합니다. 스키마 바인딩이 작동하여 이러한 뷰를 깨는 것을 방지 한 것 같습니다. 운이 좋은 날입니다. 데이터베이스 관리자에게 연락하여 데이터베이스에 미치는 영향을 확인한 후 변경을 요청하십시오.

에서 MSDN :

스키마 바인딩

뷰를 기본 테이블 또는 테이블의 스키마에 바인딩합니다. SCHEMABINDING이 지정되면 뷰 정의에 영향을주는 방식으로 기본 테이블을 수정할 수 없습니다. 수정 될 테이블에 대한 종속성을 제거 하려면 먼저보기 정의 자체를 수정하거나 삭제해야합니다 .


1
Remus에게 감사합니다. 뷰에는 SCHEMABINDING이 정의되어 있습니다. 제약 조건을 우회하는 쉬운 방법이 있습니까 아니면 실제로 작동하도록보기를 제거해야합니까?
Staelen

1
당신은 그것을 우회 할 수 없습니다. 그것이 전체 목적입니다. 누군가 테이블 변경을 방지하기 위해 schemabindig를 추가하기 위해 여분의 길이로 이동했습니다. 이것은 사고가 아니라 그 사람이 무엇을하고 있는지 알고있는 것처럼 보입니다. 당신은 확실히 당신은 테이블을 변경하려면?
Remus Rusanu

1
예, 나는 확신합니다 =) 그리고 논리적으로 (그렇게 작동하지 않는다는 것을 알고 있지만) 열의 길이를 늘리고 있습니다. 열이 삭제되고 다시 생성되지 않는 경우에만 실제로 괜찮을 것입니다. 안타깝게도 그렇지는 않지만 도움을 주셔서 감사합니다! = D
Staelen

2
동일한 문제가 발생하고 불행히도 뷰를 인덱싱하기 위해 SCHEMABINDING 뷰를 사용하고 있습니다. 따라서 필자의 경우 SCHEMABINDING을 사용하여 기본 테이블에 대한 변경 사항을 명시 적으로 차단하지 않고 인덱싱 된 뷰를 사용하기위한 SQL Server의 요구 사항을 준수하기 위해서만 사용합니다. 나는 또한 내 견해를 버리고 다시 만들지 않고 이것을 우회하고 싶습니다.
jpierson 2010-08-17

256
ALTER TABLE [table_name] ALTER COLUMN [column_name] varchar(150)

11
아니, 문제는 Remus가 언급 한 것과 같았습니다. 코드 자체에 아무것도 잘못있다
Staelen

11
@NilRad 음, 아마도 PL-SQL을 생각하고 계십니까? ALTER COLUMN은 SQL 2008 R2에서 올바른 구문입니다
schmidlop

4
내가 뭔가를 놓치고 있습니까? 왜 그렇게 많은 찬성 투표를합니까? 질문에 대한 답이 아닙니다.
Andy Wiesendanger

13
up-votes의 수는이 질문이 현재 'tsql alter nvarchar length'에 대한 Google 의 최고 인기 이기 때문에 열 길이를 변경하는 방법을 상기시키고 싶은 사람들 (나와 같은) 이이 답변을 참조하십시오. -질문이 질문의 제목이 제안하는 것보다 더 미묘하다는 점을 발견하지 않고 (당신의 의견을 읽을 때까지하지 않았던 것처럼) "감사합니다"라고 투표하십시오.
dumbledad

6

SQL Server 2008에서 "복제 된 테이블의 열 너비를 늘리기"를 원하는 사람이 있으면 " replicate_ddl=1" 의 속성을 변경할 필요가 없습니다 . 아래 단계를 따르십시오.

  1. SSMS 열기
  2. 게시자 데이터베이스에 연결
  3. 실행 명령- ALTER TABLE [Table_Name] ALTER COLUMN [Column_Name] varchar(22)
  4. 구독자에서 볼 수있는 것과 동일한 변경 사항 (트랜잭션이 복제 됨) 에서 varchar(x)까지 열 너비를 늘 varchar(22)립니다. 따라서 복제를 다시 초기화 할 필요가 없습니다.

이것이 그것을 찾는 모든 사람들에게 도움이되기를 바랍니다.


5

이 링크보기

T-SQL 명령을 사용하여 기본 제약 조건으로 MS SQL Server 테이블 열 크기 조정 또는 수정

이러한 SQL Server 문제에 대한 해결책은

테이블 열에서 DEFAULT 제약 조건을 삭제하거나 비활성화합니다.

테이블 열 데이터 유형 및 / 또는 데이터 크기 수정.

SQL 테이블 열에서 기본 제약 조건을 다시 생성하거나 활성화합니다.

안녕


스키마 바인딩 뷰를 삭제하고 다시 만들어야합니다.
nurettin

2

다음은 내가 사용중인 프로그램 버전에서 작동하는 것입니다. 귀하에게도 작동 할 수 있습니다.

나는 그것을 수행하는 지시와 명령을 놓을 것입니다. class는 테이블의 이름입니다. 이 방법으로 테이블 자체를 변경합니다. 검색 프로세스에 대한 수익 만이 아닙니다.


테이블 클래스보기

select * from class

전체 레이블에 맞게 FacID ( "faci"로 표시) 및 classnumber ( "classnu"로 표시) 열의 길이를 변경합니다.

alter table class modify facid varchar (5);

alter table class modify classnumber varchar(11);

차이점을 보려면 다시 표를보십시오.

select * from class;

(차이를 보려면 명령을 다시 실행하십시오)


이것은 실제 테이블을 좋게 변경하지만 더 좋습니다.

추신 : 나는 명령에 대한 메모로 이러한 지침을 작성했습니다. 이것은 테스트가 아니지만 도움이 될 수 있습니다. :)


0

열 데이터 정렬을 확인하십시오. 이 스크립트는 데이터 정렬을 테이블 기본값으로 변경할 수 있습니다. 현재 데이터 정렬을 스크립트에 추가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.