2015-01-09 4 views
1

정수에서 문자열/텍스트로 데이터베이스 열을 변경해야하지만 어떻게해야하는지 잘 모르겠습니다.SQL Server에서 열의 데이터 형식을 정수에서 텍스트로 변경하려면 어떻게해야합니까?

이 열은 식별 번호를 저장하기위한 것이지만 최근에는 ID 형식이 변경되었으므로 이제 ID에도 ASCII 문자가 포함됩니다. 따라서이 변경으로 새로운 ID는 정수로 저장할 수 없습니다.

업데이트 할 응용 프로그램은 Delphi 7로 작성되었으며 SQL Server 라이브러리의 odbcexpress 구성 요소를 사용합니다.

이 경우 ALTER TABLE을 사용할 수 있습니까? 또는 데이터를 문자열로 새 열에 복사하고 이전 열을 삭제 한 다음 열 이름을 이전 이름으로 바꿔야합니까?

어떻게 수행 할 수 있습니까? 나는 SQL Server의 작동에 대해 잘 알고 있지 않습니다.

감사합니다.

+1

Delphi (모든 버전)로 작성된 응용 프로그램은 ODBC Express 구성 요소와 마찬가지로 중요하지 않습니다. 상당히 표준화 된 ODBC를 통해 테이블에 액세스하는 것만으로 중요합니다. (IOW, Delphi 태그는 전혀 관련이 없습니다.) –

답변

6

ALTER TABLE 정확히 무엇을하고 싶은지 확인하십시오.

다음과 같이 보일 수 있습니다 귀하의 SQL :

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn VARCHAR(20) NOT NULL; 

참고이 하나를 참조하는 열이있는 경우, 당신은 일반적으로 일시적으로 외래 키 제약 조건을 삭제하여함으로써뿐만 아니라 사람들을 업데이트해야 할 것 변경 한 다음 외래 키 제약 조건을 다시 작성하십시오.

스토어드 프로 시저 또는 Delphi 코드의 변수와 같이 종속 또는 다운 스트림도 변경해야합니다. 댓글 관련

추가 정보 (덕분에, 모든) :이 암시 적으로 새로운 형태로 주조 될 것이다
이 이 alter column 작업이 데이터를 보존합니다. varchar가 가장 큰 변환 값을 수용 할만큼 충분히 넓 으면 int는 문제없이 varchar로 변환됩니다. int로 총 안전성을 얻으려면 가장 큰 int 값인 음수 인20 억을 처리하기 위해 varchar(11) 이상의 값을 사용하는 경우가 많습니다.

+0

내 관심사는 원래 데이터를 잃고 싶지 않기 때문입니다. 테이블을 변경하면 자동으로 정수가 문자열 표현으로 변환됩니까? 다시 한 번 감사드립니다! –

+3

@EvanZimmerman : 'ALTER TABLE .. ALTER COLUMN ...'은 새로운 형식으로 변환 할 수있는 한 ** 데이터를 보존합니다 **. 'INT'에서'VARCHAR '로 이동하는 것은'VARCHAR'가'INT'만큼 길다면 문제가되지 않습니다. 'INT'는 최대 값이 20 억이기 때문에 ** 최대로 ** 10 자리이므로 - VARCHAR (20)은 충분한 * 당신이 던지는 INT를 가질만큼 충분합니다. ** ** 잘 작동합니다 ** - 문제는 없습니다. 하지만 ** 항상 ** 실제 데이터베이스의 ** 복사본 **에서 이것을 테스트하십시오 !! 프로덕션에서이 작업을 수행하지 마십시오! –

+3

호기심에서 벗어나서 텍스트 열을 너무 짧게 만들면 어떻게되는지 테스트했습니다. SQL Server에서 오류 (NULL 값이 'NOT NULL'인 열을 만들 때 발생하는 오류)를보고 할 것으로 예상했습니다. 그러나 나는 단순히 값을''* ''로 바꾸는 것에 조금 실망했다. –