문제

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

나는 찾고있다 특정 SQL 구문 열을 변경하려면 (호출하십시오 ColumnA) 에게 "not null". 데이터에 널이 포함되어 있지 않도록 업데이트되었다고 가정합니다.

사용 SQL Server 2000.

도움이 되었습니까?

해결책

먼저 모든 현재 널 값이 사라집니다.

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

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

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

다른 팁

같은 문제가 있었지만 필드는 기본값으로 NULL을 사용했으며 이제 0으로 기본값을 원했습니다.

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

두 단계로해야합니다.

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

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

그렇지 않으면 Abatichev의 대답이 좋아 보였습니다. Alter를 반복 할 수 없습니다. (적어도 SQL 개발자에서) 열이 이미 널이 아니라고 불평합니다.

이것은 나를 위해 효과가있었습니다.

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

열이 고유 식별자가 아닌 한

UPDATE table set columnName = 0 where columnName is null

그 다음에

테이블을 변경하고 필드를 NULL로 설정하고 기본값 0을 지정합니다.

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

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

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

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

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

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

기본값이없는 경우 기본적으로 충돌을 일으키는 경우 기본적 으로이 변경에 문제가 생길 것입니다.

경우 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"

JDK (Oracle의 Apache Derby의 Oracle의 지원 배포)에 포함 된 내장 JavadB의 경우 아래의 작업이 저를 위해 일했습니다.

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

SSMS GUI에서 열을 만들고 기본값을 추가 할 수도 있습니다.

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

UPDATE myTable SET myColumn = 0

  1. 완료되면 디자인 뷰의 테이블을 사용하여 (테이블을 마우스 오른쪽 버튼으로 클릭하고 "디자인보기"를 클릭하면) 널을 허용하십시오 그렇게 같은 열 :

enter image description here

  1. 여전히 열을 선택한 상태에서 디자인보기에서열 속성 아래 창에서 다음과 같이 기본값을 0으로 설정합니다.

enter image description here

예를 들어 봅시다 :

TABLE NAME=EMPLOYEE

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

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

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

ALTER TABLE mytable modify mycolumn datatype NOT NULL;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top