etc./StackOverFlow

열 변경: null에서 null이 아님

청렴결백한 만능 재주꾼 2023. 4. 20. 02:24
반응형

질문자 :Karmic Coder


여러 개의 nullable 정수 열이 있는 테이블이 있습니다. 이것은 여러 가지 이유로 바람직하지 않으므로 모든 null을 0으로 업데이트한 다음 이러한 열을 NOT NULL 로 설정하려고 합니다. 0 으로 변경하는 것 외에도 데이터를 보존해야 합니다.

열을 " not null "로 변경하는 특정 SQL 구문 을 찾고 ColumnA 데이터가 null을 포함하지 않도록 업데이트되었다고 가정합니다.

SQL 서버 2000 사용 .



먼저 현재 NULL 값을 모두 사라지게 합니다.

 UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

그런 다음 "NULL"을 허용하지 않도록 테이블 정의를 업데이트합니다.

 ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL

mdb

나는 같은 문제가 있었지만 필드는 기본적으로 null로 설정되어 있었고 이제는 기본적으로 0으로 설정하고 싶습니다. 이를 위해서는 mdb의 솔루션 다음에 한 줄을 더 추가해야 합니다.

 ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];

Greg Dougherty

다음 두 단계로 수행해야 합니다.

  1. 열에 null이 없도록 테이블을 업데이트합니다.
 UPDATE MyTable SET MyNullableColumn = 0 WHERE MyNullableColumn IS NULL
  1. 테이블을 변경하여 열 속성 변경
 ALTER TABLE MyTable ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

Ralph Wiggum

Oracle 11g의 경우 다음과 같이 열 속성을 변경할 수 있었습니다.

 ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

그렇지 않으면 batichev의 대답이 좋아 보였습니다. 변경을 반복할 수 없습니다. 열이 이미 null이 아니라고 불평합니다(적어도 SQL Developer에서는).


JDM

이것은 나를 위해 일했습니다.

 ALTER TABLE [Table] Alter COLUMN [Column] VARCHAR(50) not null;

Dheeraj Sam

열이 고유 식별자가 아닌 한

 UPDATE table set columnName = 0 where columnName is null

그 다음에

테이블을 변경하고 필드를 null이 아닌 것으로 설정하고 기본값을 0으로 지정하십시오.


Eppz

FOREIGN KEY CONSTRAINT ...의 경우 Primary key 테이블의 컬럼에 '0'이 없으면 문제가 된다. 그에 대한 해결책은...

1 단계:

다음 코드를 사용하여 모든 제약 조건을 비활성화합니다.

 EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

2 단계:

 RUN UPDATE COMMAND (as mentioned in above comments) RUN ALTER COMMAND (as mentioned in above comments)

3단계:

다음 코드를 사용하여 모든 제약 조건을 활성화합니다.

 exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

sam05

이것은 더 간단해 보이지만 Oracle에서만 작동합니다.

 ALTER TABLE [Table] ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

또한 이를 통해 열을 변경할 뿐만 아니라 추가할 수도 있습니다. 값이 null인 경우 이 예에서 기본값(0)으로 업데이트됩니다.


csomakk

제 경우에는 게시된 답변에 어려움이 있었습니다. 나는 다음을 사용하여 끝났습니다.

 ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

VARCHAR(200) 을 데이터 유형으로 변경하고 선택적으로 기본값을 변경하십시오.

기본값이 없으면 이 변경을 수행하는 데 문제가 발생합니다. 기본값은 null이 되어 충돌을 일으키기 때문입니다.


Philip Kirkbride

열을 null이 아닌 것으로 만들고 기본값을 추가하는 것도 SSMS GUI에서 수행할 수 있습니다.

  1. 다른 사람들이 이미 언급했듯이 모든 기존 데이터가 다음과 같이 "not null"이 될 때까지 "not null"을 설정할 수 없습니다.

UPDATE myTable SET myColumn = 0

  1. 완료되면 디자인 보기의 테이블에서(테이블을 마우스 오른쪽 버튼으로 클릭하고 "디자인 보기" 클릭) 다음과 같이 Null 허용 열의 선택을 취소할 수 있습니다.

여기에 이미지 설명 입력

  1. 열이 선택된 디자인 보기 에서 아래 창에서 열 속성 을 볼 수 있으며 다음과 같이 기본값을 0으로 설정할 수 있습니다.

여기에 이미지 설명 입력


Tony L.

예를 들어 보겠습니다.

 TABLE NAME=EMPLOYEE

EMPLOYEE_NAME 열을 NOT NULL 로 변경하고 싶습니다. 이 쿼리는 작업에 사용할 수 있습니다.

 ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

Ashish Dwivedi

JDK(Oracle에서 지원하는 Apache Derby 배포판)에 포함된 내장 javaDB의 경우 아래가 저에게 효과적이었습니다.

 alter table [table name] alter column [column name] not null;

trooper31

다음 sql을 사용하여 기존 DB 컬럼의 정의를 변경할 수 있습니다.

 ALTER TABLE mytable modify mycolumn datatype NOT NULL;

Rashmi singh

  1. 먼저 변경할 열에 null 값이 없는지 확인하십시오. column's_name이 null인 테이블에서 count(*)를 선택하십시오.

  2. 누락된 값을 대치합니다. null을 빈 문자열이나 0, 평균 또는 중앙값 또는 보간된 값으로 바꿀 수 있습니다. 백필 전략 또는 포워드 필 전략에 따라 다릅니다.

  3. 열 값이 고유해야 하는지 아니면 고유하지 않아야 하는지 결정하십시오. 고유한 제약 조건을 추가하는 것보다 고유해야 하는 경우. 그렇지 않으면 성능이 적절한지 또는 색인을 추가해야 하는지 확인하십시오.


Golden Lion

출처 : http:www.stackoverflow.com/questions/689746/altering-a-column-null-to-not-null

반응형