[sql] ID 열이있는 테이블을 만드는 방법

ID테이블의 ID 열이되도록 설정된 열로 만들지 않았기 때문에 날려 버릴 기존 테이블이 있습니다.

SQL Server Management Studio를 사용 하여 기존 테이블의 “Create To …”를 스크립팅하여 다음을 얻었습니다.

CREATE TABLE [dbo].[History](
    [ID] [int] NOT NULL,
    [RequestID] [int] NOT NULL,
    [EmployeeID] [varchar](50) NOT NULL,
    [DateStamp] [datetime] NOT NULL,
 CONSTRAINT [PK_History] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

내 질문은 SQL결과 테이블에 ID열이 Identity 로 설정 되도록 어떻게 수정 합니까?



답변

CREATE TABLE [dbo].[History](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [RequestID] [int] NOT NULL,
    [EmployeeID] [varchar](50) NOT NULL,
    [DateStamp] [datetime] NOT NULL,
 CONSTRAINT [PK_History] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
) ON [PRIMARY]


답변

이것은 이미 답변되었지만 가장 간단한 구문은 다음과 같습니다.

CREATE TABLE History (
    ID int primary key IDENTITY(1,1) NOT NULL,
    . . .

더 복잡한 제약 인덱스는 실제로 옵션을 변경하려는 경우 유용합니다.

그건 그렇고, 그러한 열의 이름을 HistoryId로 지정하는 것을 선호하므로 외래 키 관계의 열 이름과 일치합니다.


답변

[id] [int] IDENTITY(1,1) NOT NULL,

물론 SQL Server Management Studio에서 테이블을 만들고 있기 때문에 테이블 디자이너를 사용하여 ID 사양을 설정할 수 있습니다.

여기에 이미지 설명 입력


답변

고유 키는 최대 2 개의 NULL 값을 허용합니다. 설명 :

create table teppp
(
id int identity(1,1) primary key,
name varchar(10 )unique,
addresss varchar(10)
)

insert into teppp ( name,addresss) values ('','address1')
insert into teppp ( name,addresss) values ('NULL','address2')
insert into teppp ( addresss) values ('address3')

select * from teppp
null string , address1
NULL,address2
NULL,address3

아래와 같은 값을 삽입하려고하면 :

insert into teppp ( name,addresss) values ('','address4')
insert into teppp ( name,addresss) values ('NULL','address5')
insert into teppp ( addresss) values ('address6')

매번 다음과 같은 오류가 발생합니다.

UNIQUE KEY 제약 조건 ‘UQ__teppp__72E12F1B2E1BDC42’위반. ‘dbo.teppp’개체에 중복 키를 삽입 할 수 없습니다.
그 진술서는 만료되었습니다.


답변