Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server自动增量中有两列?_Sql Server_Auto Increment - Fatal编程技术网

Sql server 如何在SQL Server自动增量中有两列?

Sql server 如何在SQL Server自动增量中有两列?,sql-server,auto-increment,Sql Server,Auto Increment,在SQL server DB的表中有两列,我希望在添加新字段时自动增加这两列。但是,管理工作室不允许我将两列设置为IDENTITY。还有其他方法吗?您可以基于第一个字段将第二个字段设置为计算字段 或者创建一个插入触发器,然后通过编程生成第二个字段的值。您可以将第二个字段设置为基于第一个字段的计算字段 或者进行插入触发器,然后通过编程生成第二列的值。如果您希望第二列基本上是第一列的镜像: ALTER TABLE dbo.myTable ADD foo AS [rowid] GO 如果您希

在SQL server DB的表中有两列,我希望在添加新字段时自动增加这两列。但是,管理工作室不允许我将两列设置为IDENTITY。还有其他方法吗?

您可以基于第一个字段将第二个字段设置为计算字段


或者创建一个插入触发器,然后通过编程生成第二个字段的值。

您可以将第二个字段设置为基于第一个字段的计算字段


或者进行插入触发器,然后通过编程生成第二列的值。

如果您希望第二列基本上是第一列的镜像:

ALTER TABLE dbo.myTable ADD
   foo  AS [rowid]
GO
如果您希望它应用一些数学公式来实现某种偏移:

ALTER TABLE dbo.myTable ADD
    foo  AS ([rowid]+1) * 7 --or whatever you like.
GO

如果您希望第二列基本上是第一列的镜像:

ALTER TABLE dbo.myTable ADD
   foo  AS [rowid]
GO
如果您希望它应用一些数学公式来实现某种偏移:

ALTER TABLE dbo.myTable ADD
    foo  AS ([rowid]+1) * 7 --or whatever you like.
GO

每个表只能有一个自动递增字段。但是,您可以有一个基于自动增量字段的计算字段。或者,您可以有一个int字段,通过前端代码或触发器管理序列。您还可以在SQL Server中使用

CREATE SEQUENCE MySequence START WITH 100;

CREATE TABLE MyTable
(
    RealIdentity INT IDENTITY(1,1),
    RandomCol NVARCHAR(100),
    FakeIdentity INT DEFAULT NEXT VALUE FOR MySequence
);

每个表只能有一个自动递增字段。但是,您可以有一个基于自动增量字段的计算字段。或者,您可以有一个int字段,通过前端代码或触发器管理序列。您还可以在SQL Server中使用

CREATE SEQUENCE MySequence START WITH 100;

CREATE TABLE MyTable
(
    RealIdentity INT IDENTITY(1,1),
    RandomCol NVARCHAR(100),
    FakeIdentity INT DEFAULT NEXT VALUE FOR MySequence
);

你是希望这两列在创建时具有相同的值,还是它们具有不同的种子?我并不是开发这个数据库的人……我已经问过为什么我们甚至需要标识字段,我想我们开始意识到我们不需要。尽管我还是很好奇你会怎么做。我很困惑为什么你会需要这个——你能启发一下吗?我不知道你在问什么:向表中添加一个“字段”(列)听起来像是一个DDL操作来更改模式,当这种情况发生时,你是否希望每行都更改一列?如果您谈论的是一个列从NULL更改为其他内容,那么这可能是一个触发器,它会增加行中的修订列-但您不希望使用标识。您是否希望这两个列在创建时具有相同的值,或者他们会有不同的种子?我不是开发这个数据库的人…我已经问过为什么我们甚至需要识别字段,我想我们开始意识到我们没有。尽管我还是很好奇你会怎么做。我很困惑为什么你会需要这个——你能启发一下吗?我不知道你在问什么:向表中添加一个“字段”(列)听起来像是一个DDL操作来更改模式,当这种情况发生时,你是否希望每行都更改一列?如果你说的是一个列从NULL变为其他内容,那可能是一个触发器,它会增加行中的一个修订列-但是你不想使用标识。是的,我认为触发器可能是最好的选择。它不需要遵循任何特定的公式。触发器的问题是它们很慢。是的,我认为触发器可能是最好的选择。它不需要遵循任何特定的公式。触发器的问题是它们很慢。嗨,谢谢你的回答。这些方法有并发问题吗?提前谢谢你好,谢谢你的回答。这些方法有并发问题吗?提前感谢我认为这很有用,因为序列是大多数有类似问题的人实际上可能需要的-他们可能是唯一能够以有效的方式/他们期望的方式满足他们所有需求的人。我认为这可能是最好的解决办法。非常感谢。我认为这是有用的,因为序列是大多数有类似问题的人实际上可能需要的——他们可能是唯一能够以有效的方式/他们期望的方式满足他们所有需求的人。我认为这可能是最好的解决办法。非常感谢。