2014-06-11 2 views
0

많은 뷰와 테이블이있는 큰 데이터베이스가 있습니다. 'Company' 이름테이블 및 뷰의 데이터 형식 변경

많은 테이블에서 지금

과 열의 데이터 유형을 볼은 데이터가 변경 시간 INT

이며, 지금 우리는 'Company' 열이 문자 값을 유지하고 싶다.

커서를 작성하여이 테이블과 뷰의 데이터 유형을 변경할 수 있습니다. 데이터 유형을 수동으로 변경하는 데 많은 시간이 소요됩니다.

나는이 링크의 도움으로 데이터 유형을 변경 시도 : How to Change All Sql Columns of One DataType into Another

을하지만 이것은 단지 테이블을 위해 일하고, 나는 당신의 도움을

감사합니다 미리보기의 데이터 유형을 변경할 수 없습니다입니다!

+1

뷰는 단순히 하나 이상의 테이블에있는 데이터 뷰이므로보기의 데이터 유형을 변경할 필요가 없습니다. 자동으로 수행됩니다. – duDE

+0

아니요, 그렇게하지 않으려합니다. – podiluska

+0

고마워, :) 테이블을 변경하는 동안 "ALTER TABLE ALTER COLUMN 회사가 하나 이상의 개체가이 열에 액세스하여 오류가 발생했습니다.",이 종속성을 사용하지 않도록 설정 한 후 다시 되돌릴 수있는 코드를 작성할 수 있습니까? – sumit

답변

1

보기에 올바른 데이터 형식이 표시되지 않으면 해당 데이터 형식을 다시 컴파일해야합니다. SQL Server는 종속 개체가 변경 될 경우 뷰를 무효화하는 것에 대해별로 영리하지 않습니다. 예 : 테이블에서 select * (어쨌든해서는 안됨)이라는보기가 있고 열을 추가하면 다시 컴파일 할 때까지 새 열이 반영되지 않습니다. 종속 오브젝트에 대한 다른 변경 사항에 대해서도 마찬가지입니다.

뷰를 다시 컴파일하려면 저장 프로 시저 sp_refreshview을 사용하십시오. 이 MSDN page은 절차를 설명하고 모든 뷰를 대량으로 새로 고칠 수있는 페이지 맨 아래에 스크립트가 있습니다.

1

우선 무엇이든 수정할 필요가 없습니다. 해당 표의 모든 변경 사항은 귀하의 견해에 자동으로 반영됩니다.

그렇지 않은 경우보기가 schemabinding으로 작성되지 않은 경우보기 정의에 영향을주는보기를 기본으로하는 오브젝트가 변경 될 때 sp_refreshview을 실행해야하기 때문일 수 있습니다. 그렇지 않으면 뷰를 질의 할 때 예기치 않은 결과가 발생할 수 있습니다. 그래서 @Ralf가 제안한대로 그 대답을 +1하고 sp_refreshview을 사용하여보기를 업데이트하십시오.

설명을 위해 ALTER TABLE ALTER COLUMN Company failed because one or more objects access this column. 일부 제약 조건 또는 색인이 해당 열을 사용하고 있기 때문에 먼저 삭제해야만 해당 열을 변경할 수 있기 때문입니다.

당신은 쿼리를 사용하여 관련 제약 조건을 찾을 수 있습니다

select db_name() as CONSTRAINT_CATALOG 
,t_obj.name as TABLE_NAME 
,user_name(c_obj.uid) as CONSTRAINT_SCHEMA 
,c_obj.name as CONSTRAINT_NAME 
,col.name as COLUMN_NAME 
,col.colid as ORDINAL_POSITION 
,com.text as DEFAULT_CLAUSE 

from sysobjects c_obj 
join syscomments com on c_obj.id = com.id 
join sysobjects t_obj on c_obj.parent_obj = t_obj.id 
join sysconstraints con on c_obj.id = con.constid 
join syscolumns col on t_obj.id = col.id 
and con.colid = col.colid 
where 
c_obj.uid = user_id() 

후 변경하려고 열 &에 어떤 인덱스 및/또는 제약 조건을 삭제, 그 다음 작업을해야합니다.

또한 Drop a column from table problem (SQL Server 2008)

는 희망이 도움이 질문에 대한 답변을 참조하십시오.

관련 문제