열 변경 : null ~ not null


1216

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

열 을 " " 로 변경 하기 위해 특정 SQL 구문 을 찾고 있습니다. 널을 포함하지 않도록 데이터가 갱신되었다고 가정하십시오.ColumnAnot null

사용하여 SQL 서버 2000 .


16
다른 한 가지-열을 지정하지 않는 기존 삽입물이 실패하지 않도록 기본값을 추가 할 수 있습니다. ALTER TABLE FOO ADD CONSTRAINT FOO_Bar_Default DEFAULT 0 FOR Bar
— Marc Gravell

4
또한 어떤 상황 에서는 열을 변경 NOT NULL하여 많은 로깅을 유발할 수 있다는 사실에 놀랄 수도 있습니다 .
— Martin Smith

답변:


2011

먼저 모든 현재 NULL값을 사라지게하십시오.

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

그런 다음 "NULLs"를 허용하지 않도록 테이블 정의를 업데이트하십시오.

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

49
위의 두 가지 올바른 답변에 가치를 더하겠습니다. NULL의 의미는 몇 가지 의미를 가질 수 있습니다. 일반적인 의미 중 하나는 알 수 없음입니다. 예를 들어 점수를 보자. 널 점수와 영점은 차이의 세계입니다! 위의 권장 사항을 수행하기 전에. 비즈니스 논리에서 응용 프로그램이 널 (null)을 사용하지 않도록하십시오.
— TechTravelThink

242
오타가 발생하고 DB가 폭발하는 경우를 대비하여 먼저 데이터베이스를 백업하십시오.
— mpen

20
MS SQL Management Studio가이 옵션을 허용하지 않는 것이 이상합니다. "Dropping table ..."에 대해 자랑합니다
— Sebastian

14
데이터베이스는 항상 백업해야합니다. 직원 중 한 명이 언제 UPDATE 또는 DELETE 문을 작성하고 WHERE 절을 잊었는지 알 수 없습니다.
— Vivian River

2
@SebastianGodelet : 경고를 끄거나 테이블을 수정하지 못하게하는 설정이 있습니다. 경우에 따라 테이블의 스키마를 변경하려면 새 테이블을 작성하고 이전 테이블과 이전 테이블에서 복사 한 데이터를 삭제해야합니다. 이 과정에서 오류가 발생하면 데이터가 손실 될 수 있으므로 SSMS는 경고를 표시하고 기본적으로이를 수행하지 못하게합니다.
— siride

57

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

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

이것은 문제에 대한 답변이 아닙니다. 기본값은 이미 설정되어 있으며 변경해야 할 NOT NULL입니다. 귀하의 답변 만 있으면 기존의 모든 레코드는 NULL로 유지되며 문제는 남아 있습니다.
— PandaWood

6
"한 줄 더 추가"에 대한 부분을 읽었습니까? 에서와 같이 위의 답변에 추가됩니까?
— Greg Dougherty

7
실제로 "한 줄 더 추가"가 "위의 답변 외에"를 의미한다는 것은 확실하지 않습니다 (특히 위의 답변이 많기 때문에). 귀하가 참조하는 답변을 포함 시키십시오
— PandaWood

2
차임하기를 원했고 제약 조건의 이름을 명시 적으로 지정하는 것이 좋습니다 (기본값 포함). 열을 삭제해야 할 경우 삭제하기 전에 삭제해야 할 구속 조건의 이름을 알아야합니다. DB 마이그레이션에서이 문제를 몇 차례 해결했습니다. 나는 예제가 여기에 포함되어 있다는 것을 알고 있지만 이름이 필요하지 않기 때문에 여전히 일부 개발자들이 여행하는 곳입니다.
— jocull

38

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

  1. 열에 널이 없도록 테이블을 업데이트하십시오.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. 테이블의 속성을 변경하여 열 속성 변경
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

27

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

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


Oracle 11에서는을 반복하지 않아도됩니다 datatype. 단순히 columname NOT NULL충분하다. 설명서를 참조하십시오 .
— jpmc26 2016 년

18

이것은 나를 위해 일했다 :

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

16

열이 고유 식별자가 아닌 한

UPDATE table set columnName = 0 where columnName is null

그때

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


4

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

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

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


그렇습니다. 그러나 구글은 사람들을 여기로 안내합니다. 유용하다고 생각합니다. 누구나 이것을 무시할 수는 있지만 솔직히 이것이 사람들을 돕고 있다고 생각합니다.
— csomakk

SO 규칙을 읽으십시오. 좋은 답변을 쓰려면 어떻게해야합니까? , ANSWERING TECHNICAL QUESTIONS 도움이 되고 완벽한 질문을 작성하십시오 . 참고 : 할 일이 (많이 또는 편집) 쓸모없는 답변 삭제하는 것을 두려워하지 및 하지 "대답하고 실행
— Kiquenet

4

FOREIGN KEY CONSTRAINT...의 경우 기본 키 테이블의 열에 '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"

4

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

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

변경 VARCHAR(200)당신의 데이터 형, 선택적 디폴트 값을 변경합니다.

기본값이 없으면 충돌을 일으키는 기본 값이 null이므로이 변경을 수행하는 데 문제가 있습니다.


1

예를 들어 보자.

TABLE NAME=EMPLOYEE

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

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

더 읽기 쉽게 게시하기 위해 소리를 지르지 말고 형식을 사용하십시오. 예를 들어 코드 부분을 인식하는 데 도움이됩니다. stackoverflow.com/editing-help
— Yunnosch 2016

또한 대문자로 긴 텍스트를 쓰지 마십시오. 인터넷에서 소리 치는 것으로 간주됩니다
— Zoe

1
@PawanTiwari 전체를 수정하십시오. 게시물의 모든 문제를 해결하지 않은 것 같습니다. 그것의 대부분은 대문자입니다.
— double-beep

@ double-beep, 물론 나는 그것을 명심할 것이다. 감사합니다
— Pawan Tiwari

형식 문제 외에도 Ralph Wiggum, JDM, Rashmi Singh 및 trooper31의 이전 답변과 비교할 때 답변이 제공하는 추가 통찰력을 더 명확하게 설명하십시오. 따라서 솔루션의 더 좋은 점을 지적해야합니다. 답을 복사하는 것의 인상을 피하십시오 ...
— Yunnosch

0

JDK (Oracle에서 지원하는 Apache Derby 배포판)에 포함 된 내장 JavaDB의 경우 아래가 나를 위해 일했습니다.

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

0

SSMS GUI에서 열을 null로 설정하지 않고 기본값을 추가 할 수도 있습니다.

  1. 다른 사람들이 이미 언급했듯이 기존 데이터가 모두 "널이 아님"이 될 때까지 "널이 아님"을 설정할 수 없습니다.

UPDATE myTable SET myColumn = 0

  1. 완료되면 테이블을 디자인보기에 놓고 (테이블을 마우스 오른쪽 단추로 클릭하고 "디자인보기"를 클릭) 다음 과 같이 Null 허용 열을 선택 취소하면됩니다 .

여기에 이미지 설명을 입력하십시오

  1. 열이 선택된 디자인보기 에서 아래 창에 열 속성 이 표시되고 여기에서 기본값을 0으로 설정할 수 있습니다.

여기에 이미지 설명을 입력하십시오


downvote가 표시되지만 피드백 없이는 아무것도 수정할 수 없습니다. 문제가 발생하면 알려주십시오.
— Tony L.

-1

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

ALTER TABLE mytable modify mycolumn datatype NOT NULL;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.