2016-08-02 4 views
0

Я пытаюсь создать последовательность с таблицей MiCliente последовательность должна быть устранена, если она существует, должна быть одна за другой и с циклом, и она должна начинаться с 1000. Мне нужно связать последовательность с колонкой MiCliente.idCliente.Использование последовательностей с SQL Server

CREATE TABLE dbo.MiCliente 
(
    idCliente   int    NOT NULL, 
    idMunicipio  int    NOT NULL, 
    cedula    varchar(20)  NOT NULL, 
    nombres   varchar(100) NOT NULL, 
    apellidos   varchar(100) NOT NULL, 
    idSexo    char(1)   NULL, 
    idEstadoCivil  tinyint   NULL, 
    fechaNacimiento date   NULL, 
    telefono   varchar(20)  NULL, 
    celular   varchar(20)  NULL, 
    direccion   varchar(100) NULL, 
    email    varchar(100) NULL  
); 
GO 

Create Sequence Conteo 
AS tinyint 
START WITH 1000 
INCREMENT BY 1 
GO 

Когда я выполнить запрос я получаю

error 343

+4

FYI, 'TINYINT' для значений от 0 до 255. – ZLK

+0

Последовательности представляют собой функцию SQL sever 2012 и onward. Добавьте соответствующий тег в вопрос, чтобы читатели поняли это. – RBT

ответ

0

Я думаю, может быть, поле идентификатора будет решить вашу проблему лучше. Вы не можете связать последовательность с полем таблицы; по крайней мере, не по определению. Последовательность может использоваться как тип объекта «счетчик» и может быть вызвана для таблицы для создания значения, которое вставляется в таблицу.

(здесь разностороннее обсуждение с использованием последовательностей: https://www.simple-talk.com/sql/learn-sql-server/sql-server-sequence-basics/)

Например, используя последовательность, созданную в вашем примере (имейте в виду, как комментарии ZLK, TINYINT для значений от 0 до 255; вы должны использовать Int) можно было бы сказать:

select (next value for Conteo) idCliente, cedula, email from dbo.MiCliente; 

или что-то вроде

INSERT INTO MiCliente 
(idCliente, idMunicipio, cedula, nombres, apellidos) 
VALUES 
(NEXT VALUE FOR Conteo, 1,'test','Smith','test2'); 

Так что это работает, но один может ссылаться на то же самое последовательность для другой таблицы. Поэтому он специально не привязан к вашему столу. Это может быть и неважно.

С другой стороны, вы можете установить idCliente как поле идентификации, чтобы оно также начиналось с 1000. Это «привязано» к таблице и, на мой взгляд, проще в использовании. Число просто генерируется автоматически.

Таким образом, вы могли бы сделать что-то вроде:

Alter table dbo.MiCliente add idCliente INT IDENTITY(1000,1) 

И тогда вы можете сделать его первичный ключ, а также:

alter table dbo.MiCliente add constraint PK_MiCliente PRIMARY KEY(idCliente) 
0

Когда я выполнил свой запрос он просто дает следующее сообщение об ошибке:

Msg 11708, Level 16, State 1, Line 2
An invalid value was specified for argument 'START WITH' for the given data type.

Очевидно, что вы используете неправильный тип данных tinyint w hile, создавая последовательность. Изменение его на int должно решить вашу проблему. Вот измененный запрос. Надеюсь это поможет!

Create Sequence Conteo 
AS int 
START WITH 1000 
INCREMENT BY 1 
GO 

Мне удалось создать последовательность успешно после внесения этого изменения. Я на SQL Server 2012.

Смежные вопросы