我正在尝试创建一个带有表MiCliente
的序列,如果存在这个序列必须消除,必须逐个并且有一个循环,它需要从1000开始。我需要关联序列列MiCliente.idCliente
。
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
当我执行查询时,我收到了
错误343
答案 0 :(得分: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)
答案 1 :(得分:0)
当我执行您的查询时,它只会出现以下错误:
Msg 11708,Level 16,State 1,Line 2
为给定数据类型的参数“START WITH”指定了无效值。
很明显,您在创建序列时使用了错误的数据类型tinyint
。将其更改为int
可以解决您的问题。这是修改后的查询。希望这有帮助!
Create Sequence Conteo
AS int
START WITH 1000
INCREMENT BY 1
GO
我可以在进行此更改后成功创建序列。我在SQL Server 2012上。