Sql server SQL Server标识列插入

Sql server SQL Server标识列插入,sql-server,etl,database-replication,identity-column,Sql Server,Etl,Database Replication,Identity Column,我支持数据复制产品。我有一个客户非常沮丧,因为SQL Server不能拥有一个具有标识列的表,该标识列在添加行时会自动递增,而不为该列提供值,同时在提供值时会接受/使用该值—我可能会添加,这两种情况都以很高的速度持续发生,并且跨越数百个表。他们指出其他数据库显然可以做到这一点 我在网上看到的一切和我自己的实验似乎都表明,这在SQL Server中是无法实现的,但我想把它放在那里,以防我错了,遗漏了什么。到目前为止,我给他们的唯一建议是切换到序列(而不是标识)并将其用作列的默认值。我已经测试过了,

我支持数据复制产品。我有一个客户非常沮丧,因为SQL Server不能拥有一个具有标识列的表,该标识列在添加行时会自动递增,而不为该列提供值,同时在提供值时会接受/使用该值—我可能会添加,这两种情况都以很高的速度持续发生,并且跨越数百个表。他们指出其他数据库显然可以做到这一点


我在网上看到的一切和我自己的实验似乎都表明,这在SQL Server中是无法实现的,但我想把它放在那里,以防我错了,遗漏了什么。到目前为止,我给他们的唯一建议是切换到序列(而不是标识)并将其用作列的默认值。我已经测试过了,它的工作原理和他们想要的完全一样,但是他们对在数百张桌子上这样做的想法感到不满。谢谢。

身份的关键在于SQL Server控制它;您可以让SQL Server完全管理该值。您真正想要的是
序列
作为
默认值

创建表dbo.SomeTable(ID int不为NULL,
SomeColumn-varchar(10));
去
创建序列dbo.SomeTableID,从1开始,增量为1;
去
ALTER TABLE dbo.SomeTable ADD CONSTRAINT PK_SomeTable主键集群(ID);
ALTER TABLE dbo.SomeTable ADD CONSTRAINT DF_SomeTableID默认值dbo.SomeTableID的下一个值;
去
插入dbo.SomeTable(SomeColumn)
值('abc'),('def');
去
插入dbo.SomeTable(ID,SomeColumn)
值(3,'xyz');
去
--由于3已在使用中,但预期会出现错误。
插入dbo.SomeTable(SomeColumn)
价值观(“abc”);
去
插入dbo.SomeTable(SomeColumn)
值(“def”)--4.
去
--清理
DROP TABLE dbo.SomeTable;
删除序列dbo.SomeTableID;

身份的关键在于SQL Server控制它;您可以让SQL Server完全管理该值。您真正想要的是
序列
作为
默认值

创建表dbo.SomeTable(ID int不为NULL,
SomeColumn-varchar(10));
去
创建序列dbo.SomeTableID,从1开始,增量为1;
去
ALTER TABLE dbo.SomeTable ADD CONSTRAINT PK_SomeTable主键集群(ID);
ALTER TABLE dbo.SomeTable ADD CONSTRAINT DF_SomeTableID默认值dbo.SomeTableID的下一个值;
去
插入dbo.SomeTable(SomeColumn)
值('abc'),('def');
去
插入dbo.SomeTable(ID,SomeColumn)
值(3,'xyz');
去
--由于3已在使用中,但预期会出现错误。
插入dbo.SomeTable(SomeColumn)
价值观(“abc”);
去
插入dbo.SomeTable(SomeColumn)
值(“def”)--4.
去
--清理
DROP TABLE dbo.SomeTable;
删除序列dbo.SomeTableID;

编写脚本,将DML转换为使用序列?如果他们不能在做改变时被激怒,那么他们就得不到改变。他们不能仅仅希望或要求功能存在。也许这就是OP所问的真正问题,@MatBailie:“我如何创建一个脚本来
标识改变
我所有的表,使用
序列?”当然,答案并不简单;尤其是那些列是主键,并且被外键引用时。@larnu确实如此。如果是这样,那应该是问题所在。写一个脚本来转换DML以使用序列?如果他们不能在做改变时被激怒,那么他们就得不到改变。他们不能仅仅希望或要求功能存在。也许这就是OP所问的真正问题,@MatBailie:“我如何创建一个脚本来
标识改变
我所有的表,使用
序列?”当然,答案并不简单;尤其是那些列是主键,并且被外键引用时。@larnu确实如此。如果是这样的话,那应该是个问题。是的-我同意这个顺序-我知道怎么做-我只是在做一些尽职调查,以确保身份栏没有办法。不,@KenM,没有。通过使用
IDENTITY
您表示希望SQL Server控制该值。是的-我同意顺序-我知道如何操作-我只是在做一些尽职调查,以确保IDENTITY列没有任何方法。不,@KenM,没有。通过使用
标识
表示希望SQL Server控制该值。