0

동일한 필드 이름이 여러 테이블에 걸쳐 복제되는 필드의 이름을 바꾸는 문제가 있습니다.많은 데이터베이스 테이블에서 리 팩터 이름 바꾸기 필드

모든 테이블을 통과하는 스크립트 또는 무료/저렴한 도구를 찾고 fieldA가있는 경우 이름을 fieldB로 바꿉니다. 당신은 당신의 목적을 위해 동적 SQL 문을 작성하는 SQL 서버 메타 데이터 테이블을 사용할 수 있습니다

감사

+0

필드에 제약 조건이 있습니까? 하나 또는 여러 개의 데이터베이스에 테이블이 있습니까? –

+0

한 번에 하나의 데이터베이스가 정상입니다. 제한이 없습니다. –

답변

2

. 사용 가능한 테이블 목록을 보려면 sys.tables 테이블 목록 및 sys.columns 열 목록을 참조하십시오. 이 테이블을 사용하면 SQL 문 테이블을 만들 수 있습니다. 동적 sqls를 실행하려면 sp_executesql 저장 프로 시저가 필요합니다.

이것은 메타 데이터 테이블과 sp_executesql을 사용하는 방법을 보여주기위한 샘플 코드입니다. 그리고 필자는 다른 메타 데이터 테이블을 더 편하게 사용했습니다. 또한 커서를 사용하여 쿼리에서 반환 된 모든 스크립트를 실행할 수도 있습니다.

CREATE Database TestDB 

CREATE Table Table1 (Id int , fieldA varchar(50)) 

Declare @update_query nvarchar(max) 

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + '''' 
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME 
WHERE 
    c.COLUMN_NAME = 'fieldA' 

SELECT @update_query 

EXEC sp_executesql @update_query 
+0

이 도구를 기본 도구로 사용하여 내 도구 세트를 만들 것 같습니다. –

1

VS2010의 데이터베이스 프로젝트 유형을 아직 확인하지 않은 경우 살펴보십시오. SQL Server Management Studio를 사용하는 것보다 DB 리팩토링을 쉽게하는 많은 기능이 있습니다.

예를 들어 열의 이름을 바꾸면 이전 열 이름을 참조하는 모든 FK에 대해 빌드 오류가 발생합니다. 또한 데이터베이스 객체가 더 이상 존재하지 않는 객체를 참조하지 않도록 많은 빌드 타임 검증을 수행합니다. 모든 데이터베이스 객체가 텍스트 파일로 유지되기 때문에 이름 바꾸기와 같은 작업은 검색/바꾸기와 거의 같습니다.

또한 DB 프로젝트 스크립트 & 데이터베이스를 비교하고 DIFF 보고서를 생성하며 선택한 변경 사항을 둘 사이에서 이동하는 스크립트를 생성하는 매우 편리한 "동기화"기능이 있습니다 (DB 프로젝트에서 SQL Server로 또는 그 반대로)).

모든 것을 말하면 자동으로 이름 바꾸기를 수행하지 않습니다. 즉, 열의 이름을 바꿀 때 프로젝트 전체에서 해당 열에 대한 모든 참조가 수정되지는 않습니다. 그러나 실수를하면 데이터베이스 구조의 유효성을 검증 할 때 빌드 오류가 발생합니다. 따라서 최소한 변경해야 할 장소를 쉽게 찾을 수 있습니다.

+0

나는 무거운 VS 사용자입니다. 나는 무언가를 독립적으로 원했다. –

0

Azure SQL Server를 사용하는 경우 sp_rename, @objtype = 'COLUMN'에 대한 다른 입력 매개 변수를 사용하여 Sam의 대답을 사용할 수 있습니다.

Declare @update_query nvarchar(max) 

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + ''',''' + 'COLUMN' + '''' 
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME 
WHERE 
    c.COLUMN_NAME = 'fieldA' 

SELECT @update_query 

EXEC sp_executesql @update_query 
관련 문제