시퀀스를 사용하는 열이있는 테이블을 어떻게 만듭니 까?


10

나는 다음을 가지고있다

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL,
    [Title] [nvarchar](64) NOT NULL
)

CREATE SEQUENCE MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

MyTable에 새 레코드를 삽입하고 ID를 시퀀스의 다음 값으로 설정하고 싶습니다. 어떻게하니? 아마도 방아쇠가 있거나 다른 방법이 있습니까? 어떻게?

SQL Server 2012 를 사용하면서 간격 버그로 인해 Identity를 사용하고 싶지 않습니다 .

답변:


16

열의 기본 속성으로 지정

CREATE TABLE [MyTable]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title] [nvarchar](64) NOT NULL
);

미래의 리더는 시퀀스 수 있습니다 서비스가 예기치 않게, 캐시에 개체의 값이 손실 될 수 있습니다 중지 된 경우 간격이있다. 여기서, 그들은 no cache시퀀스 객체에 대한 성능 저하의 트레이드 오프로이를 완화하도록 지정 하고 있습니다.

시퀀스 생성 참조


이 경우에도 안전한가요 cache? 연결 링크에서 Microsoft는 사용하도록 지시합니다 no cache.
BrunoLM

@BrunoLM 그것은 우리가 이야기하는 db의 크기가 크거나 작은 지, 그리고 우리가 말하는 초당 / 분의 트랜잭션 수에 달려 있습니다.
Techie Joe

2

명령문 SEQUENCE에서 를 사용하려면 INSERT다음을 시도하십시오.

INSERT INTO [MyTable] ([ID],[TITLE]) VALUES (NEXT VALUE FOR dbo.MyTableID, @TITLE) 

NEXT VALUE FOR dbo.MyTableID에서 다음 숫자를 얻는 구문입니다 SEQUENCE.


0

다음 예에서 설명하는 것처럼 여러 테이블에 대해 하나의 시퀀스를 사용할 수 있습니다.

CREATE SEQUENCE dbo.MyTableID
    START WITH 1
    INCREMENT BY 1
    NO CACHE
    ;
GO

CREATE TABLE dbo.[MyTable1]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title1] [nvarchar](64) NOT NULL
);

CREATE TABLE dbo.[MyTable2]
(
    [ID] [bigint] PRIMARY KEY NOT NULL DEFAULT (NEXT VALUE FOR dbo.MyTableID),
    [Title2] [nvarchar](64) NOT NULL
);

--Insert 2 rows
insert into  [MyTable1] (title1)
select 'title11'

insert into  [MyTable1] (title1)
select 'title12';

insert into  [MyTable2] (title2)
select 'title21'

insert into  [MyTable2] (title2)
select 'title22';

select f1.*, 'Into MyTable1' Tb from  [MyTable1] f1
union all
select f1.*, 'Into MyTable2' Tb from  [MyTable2] f1

산출:

+----+---------+---------------+
| ID | Title1  |      Tb       |
+----+---------+---------------+
|  1 | title11 | Into MyTable1 |
|  2 | title12 | Into MyTable1 |
|  3 | title21 | Into MyTable2 |
|  4 | title22 | Into MyTable2 |
+----+---------+---------------+

sqlfiddle

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