sql 스 크 립 트 에 따라 데이터베이스 테이블 구 조 를 수정 하 는 몇 가지 해결 방안

최근 에는 프로젝트 때문에 작은 도 구 를 만들어 야 한다.수요:고객 이 사용 하 는 오래된 라 이브 러 리 와 데 이 터 를 저장 하 는 데 시간 이 걸 렸 습 니 다.우 리 는 고객 에 따라 새로운 기능 을 제시 하여 오래된 라 이브 러 리 를 바탕 으로 새로운 라 이브 러 리 를 수정 합 니 다.이러한 수정 은 저장 과정 을 포함 하고 표를 추가 하 며 표 필드 유형 을 수정 하고 필드 를 추가 하 는 세부 적 인 수정 이 많 습 니 다.그리고 우 리 는 스스로 소프트웨어 를 업데이트 하고 테스트 한 후에 고객 측의 오래된 라 이브 러 리 를 바 꿔 야 한다.오래된 라 이브 러 리 의 데 이 터 는 저장 해 야 한다.솔 루 션 1:SQL SERVER 08 R2 자체 기능 으로 새 라 이브 러 리 스 크 립 트 를 만 들 고 싶 습 니 다.오래된 라 이브 러 리 의 이름 을 바 꾸 고 새 라 이브 러 리 스 크 립 트 를 달 린 다음 데이터베이스 자체 기능 을 통 해 오래된 라 이브 러 리 데 이 터 를 새 라 이브 러 리 데이터 로 가 져 옵 니 다.테스트 할 때 데이터 의 양 이 많 지 않 고 속도 가 비교적 이상 적 이다.그러나 이것 은 고객 에 게 매우 불편 하고 데이터 의 양 이 많 으 면 시간 이 비교적 걸린다.그래서 boss 는 나 에 게 작은 도 구 를 만들어 달라 고 했 습 니 다.설마 내 가 프로그램 으로 이상 의 조작 을 실현 해 야 하 는 건 아니 겠 지,oh my god!그래서 나 는 생각 하고 생각 하고...솔 루 션 2:데이터 베 이 스 를 직접 조작 하 겠 습 니 다.데이터 베이스 에 존재 하 는 표 에 대해 서 는 이름 을 바 꾸 고 새 스 크 립 트 로 표를 만 든 다음 에 오래된 표 에 데 이 터 를 삽입 하 겠 습 니 다.관련 SQL 문 구 는 다음 과 같 습 니 다.표 이름 수정:EXEC sprename'oldname','new Name'삽입 데이터:insert into new Table(column 1,column 2,....)select column 1,column 2,....................................표 이름 이나 열 이름 을 변경 합 니 다
 
sp_renamedb



sp_renamedb [ @dbname = ] ' old_name ' ,
[ @newname = ] ' new_name '


[ @dbname = ] ' old_name '

。old_name sysname , 。

[ @newname = ] ' new_name '

。new_name 。new_name sysname , 。


0 ( ) ( )


sysadmin dbcreator sp_renamedb。


accounting financial。

EXEC sp_renamedb ' accounting ' , ' financial '
복사 표 구조 와 표 데 이 터 를 참고 하 는 SQL 문 구 는 참고 내용 을 보 여 줍 니 다.1.복사 표 구조 와 데 이 터 를 새 표 CREATE TABLE 새 표 SELECT*FROM 옛 표 WHERE 1=2 즉,WHERE 조건 이 성립 되 지 않도록 합 니 다.방법 2:(tianshibao 에서 제공)CREATE TABLE새 표 LIKE 구 표 3.구 표 의 데 이 터 를 새 표 로 복사(두 표 구조 가 같다 고 가정)INSERT INTO 새 표 SELECT*FROM 구 표 4.구 표 의 데 이 터 를 새 표 로 복사(두 표 구조 가 다르다 고 가정)INSERT INTO 새 표(필드 1,필드 2,......)SELECT 필드 1,필드 2,...FROM 구 표 는 이것 을 생각 하 니 뭔 가 부족 한 것 같 았 다.으,procedure 와 constraint,좋 습 니 다.그럼 저도 삭제 하고 추가 하 겠 습 니 다.먼저 select name from sys.procedures select constraintname, table_name from information_schema.table_constraints drop procedure[dbo]를 삭제 합 니 다.[procedurename] alter table tableName drop CONSTRAINT [PK_ |FK_ |UK_ |DF_ |CK_] 여기 서 몇 가 지 를 더 보충 합 니 다.제약 접두사 에 대해 서 는 SQL 제약 접 두 사 를 참고 하여 쉽게 볼 수 있 습 니 다.다시 열거 합 니 다-메 인 키 constraint PK필드 primary key(필드),--유일한 제약 조건 UK필드 unique key(필드),--기본 제약 constrint DF필드 default('기본 값')필드,--제약 조건 검사 constraint CK필드 check(제약 조건.예 를 들 어 len(필드)>1),--주 외 키 관계 constraint FK주 표표 foreign(외 키 필드)references 메 인 시트(메 인 시트 메 인 키 필드)에서 해당 스 크 립 트 파일 을 읽 고 실행 합 니 다.해결 방안 3:이리 저리 생각해 보 니 왜 데 이 터 를 가 져 와 야 하 는 지,표 구 조 를 직접 바 꾸 면 되 잖 아 요.그래서 표 의 필드 select column 읽 기name,data_type from information_schema.columns where table_name='table Name'은 이전 표 에 존재 하 는 필드 ALTER TABLE[table Name]ALTER COLUMN[columnname][int]NOT NULL 은 이전 표 에 존재 하지 않 는 필드 ALTER TABLE[table Name]ADD COLUMN[columnname][int]NOT NULL 에 대해 데 이 터 를 가 져 오지 않 아 도 오래된 라 이브 러 리 구 조 를 업데이트 할 수 있 습 니 다.그 중에서 ADO.NET 분야 의 지식 을 활용 하 는 것 을 제외 하고스 크 립 트 에 해당 하 는 SQL 명령 과 정규 표현 식 같은 것 도 사용 되 었 습 니 다.물론 현재 의 방안 에는 아직도 문제 가 존재 한다.이 도 구 는 아직 통용 되 지 않 고 오래된 표 가 필요 한 나머지 열 을 삭제 하지 않 았 으 며 잘못 사용 하 는 것 도 주도면밀 하지 못 하 다.후기 에는 프로젝트 의 수요 에 따라 더욱 개선 할 것 이다.

좋은 웹페이지 즐겨찾기