2016-08-02 54 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

僅供參考,'TINYINT'值爲0到255. – ZLK

+0

序列是一個SQL服務器2012和以後的功能。請在問題中添加適當的標籤,以便讀者清楚。 – 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創造序列。將其更改爲int應該可以解決您的問題。這是修改的查詢。希望這可以幫助!

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

在進行此更改後,我能夠成功創建序列。我在SQL Server 2012上。