SQL 테이블에 기본값을 삽입하는 방법은 무엇입니까?


82

다음과 같은 테이블이 있습니다.

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)

field2 및 field4에 대한 기본값이있는 행을 삽입하고 싶습니다.

나는 시도 insert into table1 values (5,null,10,null)했지만 작동 ISNULL(field2,default)하지 않고 작동하지 않습니다.

행을 삽입 할 때 열에 대한 기본값을 사용하도록 데이터베이스에 알리려면 어떻게해야합니까?


2
모든 열에 기본값 이있는 경우이 질문 을 참조하십시오 .
stakx - 더 이상 기여하지

1
방법 을 정의하지 않고 " 작동하지 않음 "을 게시 하지 마십시오 .
underscore_d

답변:


90

insert 문에 기본값을 사용할 열을 포함하지 마십시오. 예를 들면 :

INSERT INTO table1 (field1, field3) VALUES (5, 10);

... field2field4에 대한 기본값을 사용 하고 에 5를 할당 field1하고에 10을 할당 합니다 field3.


1
열에 기본값이 정의되어 있지 않고 "NOT ALLOW NULLS"로 설정되어 있으면 어떻게됩니까?
Danon

4
@Danon 그것은 OP의 질문이 묻는 것이 아닙니다. 그런 댓글을 남기지 말고 새로운 질문을 올려주세요. 나는 당신이 무엇을 요구하는지 짐작조차 할 수 없다. 왜냐하면 둘 다 정의 된 기본값이없고 NOT NULL… 인 컬럼에 기본값을 삽입하려고 시도하는 것은 말이되지 않기 때문이다 .
binki

@binki 아마도 내 의견을 바꿔야 할 것 같습니다. "aroth : 열이 기본값을 정의하지 않았고 'NOT ALLOW NULLS'로 설정되었을 때 가능한 예외 때문에 답변이 완전하지 않습니다."
Danon

3
@Danon-OP는 "field2 및 field4에 대한 기본값이있는 행을 삽입하고 싶습니다."라고 말하고 "행을 삽입 할 때 데이터베이스가 열에 대한 기본값을 사용하도록 어떻게 알릴 수 있습니까?"라고 묻습니다. 당신은 기본 값을 때 대답 경우에는 적용되지 않습니다 맞아요 되지 않는 문제가 명시 적으로되어 있지만으로 정의 하지 불완전으로 답을 설명하기 정말 정확하지의 경우에 대해 물어. 완전히 다른 질문에 대해 이야기하고 있습니다 (별도의 질문으로하는 것이 가장 좋습니다).
aroth

157

테이블 변경 (새 열 또는 열 순서 등)에 독립적이되도록 열을 나열하는 것이 가장 좋습니다.

insert into table1 (field1, field3)  values (5,10)

그러나 이것을 원하지 않으면 DEFAULT키워드를 사용하십시오.

insert into table1 values (5, DEFAULT, 10, DEFAULT)

14
대박! 이것이 바로 제가 찾던 것입니다. 참고 : NULL 대신 DEFAULT를 전달하여 열과 값을 지정할 수도 있습니다. DEFAULT 제약 조건이있는 경우 기본값을, 열이 Null을 허용하고 기본 제약 조건이 지정되지 않은 경우 NULL을 얻을 수 있습니다.
John

2
이것은 않는 일을하지만, 내가 사용 공상 수하려고 할 때 (CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END)그것이 것 없는 많은 내 억울함에, 작동합니다. 모든 시나리오를 다루거나 Dynamic-SQL을 사용하기 위해 여러 개의 Insert-Statement를 준비해야했습니다. :(
MikeTeeVee 2013-08-13

어떤 이유로 SQLite 용 DB 브라우저에서이 작업을 수행 할 수 없었습니다. 주변의 구문 오류에 대해 계속 불평했습니다 DEFAULT. 위의 예에서와 같이 기본이 아닌 열을 지정한 다음 해당 열에 대한 값만 제공하면 마침내 작동했습니다.
Will Matheson

공식 문서는 그것에 대해 아무것도 말하지 않는다. 이 사용은 DEFAULT안전한가요? (문서화되지 않은 경우 사전 통지없이 sqlite3의 향후 버전에서 기능이 생략 된 경우 불만을 제기 할 수 없습니다.)
ynn

@ynn 또한 Using SQLite (p.326) 책 은 " 열 목록에서 열을 제외하거나 기본값을 알고 명시 적으로 삽입하는 것 외에는 기본값을 지정할 방법이 없습니다. "라고 말합니다.
ynn

41

가장 좋은 방법은 다음과 같습니다.

insert your_table
default values

5
이것은 모든 열에 연관된 기본값이 있고 열 이름을 지정하지 않으려는 경우 작동합니다.
umbersar

6
이 반드시 질문은 질문에 대한 완전한 대답하지 않았다하더라도, 당신은 실수로 그 :) 감사 그래서, 내가 가진 질문에 대답
라이언

5

이렇게 해봐

INSERT INTO table1 (field1, field3) VALUES (5,10)

그러면 field2와 field4에 기본값이 있어야합니다.


3

열에 NULL값이 없어야 하는 경우 열도 정의해야합니다 NOT NULL. 그렇지 않으면 전달 된 값 NULL이 기본값 대신 사용되어 오류가 발생하지 않습니다.

당신이 통과하지 않을 경우 어떤 (당신은 그 필드를 지정해야합니다 이러한 필드 값 않습니다 사용할)를 기본값이 사용됩니다 :

INSERT INTO 
  table1 (field1, field3) 
VALUES   (5,10)

1

이런 식으로 쓸 수 있습니다

GO
ALTER TABLE Table_name  ADD
column_name decimal(18, 2) NOT NULL CONSTRAINT Constant_name DEFAULT 0
GO
ALTER TABLE Table_name SET (LOCK_ESCALATION = TABLE)
GO
COMMIT

0

기본값을 삽입하려면 다음과 같이 생략해야합니다.

Insert into Table (Field2) values(5)

다른 모든 필드는 null 또는 정의 된 경우 기본값을 갖습니다.


-5
CREATE PROC SP_EMPLOYEE                             --By Using TYPE parameter and CASE  in Stored procedure
(@TYPE INT)
AS
BEGIN
IF @TYPE=1
BEGIN
SELECT DESIGID,DESIGNAME FROM GP_DESIGNATION
END
IF @TYPE=2
BEGIN
SELECT ID,NAME,DESIGNAME,
case D.ISACTIVE when 'Y' then 'ISACTIVE' when 'N' then 'INACTIVE' else 'not' end as ACTIVE
 FROM GP_EMPLOYEEDETAILS ED 
  JOIN  GP_DESIGNATION D ON ED.DESIGNATION=D.DESIGID
END
END

6
나는 이것이 답이라고 생각하지 않는다.
Giulio Caccin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.