2009-12-03 3 views

답변

14

, 얻을 당신은 시작 :

Select 'Alter Table [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] Alter Column [' + COLUMN_NAME + '] VarChar(' + CAST(CHARACTER_MAXIMUM_LENGTH As VARCHAR) + ')' 
From INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' 

이것은 (당신을 위해 필요한 모든 ALTER 문을 생성합니다 잘라 내기, 붙여 넣기, 실행).

이는 아무런 제약 사항도 고려하지 않음을 유의하십시오. niggly sysdiagrams MAX를 처리하고 배제하기 위해

+1

+1 완벽합니다. 나는 똑같은 해결책을 가졌지 만, 아주 아주 못생긴 복잡한 쿼리를 가지고있다 ... – Jonathan

+0

+1 굉장한 기술 :-) –

+0

@Jonathan 어떻게이 코드에서 "필요한 모든 alter 문을 생성한다"를 사용 하는가? SSQL Management Studio를 사용하여 "잘라 내기, 붙여 넣기, 실행"할 수 있습니까? –

3

데이터 아치에게 요청합니까?

또는

는, NVARCHAR 년대 후 변경, 시스템에있는 모든 개체의 스크립트를 생성 새 데이터베이스를 작성하고 이전에서로 데이터를 가져옵니다.

또는

는 기존 데이터베이스를 업데이트하는 스크립트를 변경 작성합니다.
가 (. 그것은 프로덕션 데이터베이스 또는 클라이언트 데이터베이스의 경우가 가장 좋은 방법이 될 수 있음) 다음은

+4

는 "데이터가 그것을 할 아치 요청". –

+0

varchar로 변환되지 않는 데이터가 있는지 먼저 확인하는 것을 잊지 마십시오. 데이터 아키텍트가 이것을 원한다면 스크립트를 작성하는 것이 그 사람의 몫입니다. – HLGEM

4

: 회지지

SELECT 
' 
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] 
ALTER COLUMN [' + COLUMN_NAME + '] 
VARCHAR(' + 
    (CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 
     THEN 'MAX' 
     ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) 
    END) 
+ ') 
' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE = 'NVARCHAR' AND TABLE_NAME <> 'SYSDIAGRAMS' 
관련 문제