Sql server 自动生成独立于主键的唯一ID

Sql server 自动生成独立于主键的唯一ID,sql-server,Sql Server,我有一个关系数据库(我是新创建的),其中有许多与棒球统计跟踪和分析相关的表。我目前正在处理的表格是tbl_PitchLog表格,它跟踪at-bat中的投球 我想做的是不需要at bat表,只需要在一组投球中使用at bat唯一ID。我有一个Pitch_ID字段,但我希望SS生成一个新的AtBat_ID,然后我可以引用它来获取特定at bat的所有音高 比如说 Pitch_ID | Pitch_Number | Result 1 1 Foul 2

我有一个关系数据库(我是新创建的),其中有许多与棒球统计跟踪和分析相关的表。我目前正在处理的表格是
tbl_PitchLog
表格,它跟踪at-bat中的投球

我想做的是不需要at bat表,只需要在一组投球中使用at bat唯一ID。我有一个
Pitch_ID
字段,但我希望SS生成一个新的
AtBat_ID
,然后我可以引用它来获取特定at bat的所有音高

比如说

Pitch_ID | Pitch_Number | Result
1            1            Foul
2            2            Foul
3            3            Strike
4            1            Ball
5            2            Flyout
6            1            Groundout
将是:

Pitch_ID | AtBat_ID | Pitch_Number | Result
1           1            1            Foul
2           1            2            Foul
3           1            3            Strike
4           2            1            Ball
5           2            2            Flyout
6           3            1            Groundout

创建
tbl_PitchLog
表,将
Pitch_ID
作为主键,同时从主表获取外键


您要查找的是一个。

创建
tbl_PitchLog
表,其中
Pitch_ID
作为主键,同时它是从主表获取的外键


您需要的是一个。

您没有指定正在使用的SS的版本,但是SQL Server 2012引入了序列;您可以创建at bat序列,在at bat更改时获取下一个值,并将该值用于插入

CREATE SEQUENCE at_bat_seq
 AS INTEGER
 START WITH 1
 INCREMENT BY 1
 MINVALUE 1
 MAXVALUE <what you want the max to be>
 NO CYCLE; 

DECLARE @at_bat int;
SET @at_bat = NEXT VALUE FOR at_bat_seq; 
按顺序创建序列
作为整数
从1开始
增加1
最小值1
最大值
无循环;
声明@at_bat int;
设置@at_bat=at_bat_seq的下一个值;

大多数限定词都是不言自明的;[NO]循环指定当值达到最大值时,是否会在最小值处重新开始。如上所述,当达到最大值时,您将得到一个错误。如果您只想在达到最大值时重新开始,请指定CYCLE而不是NO CYCLE。

您不指定正在使用的SS版本,但是SQLServer2012引入了序列;您可以创建at bat序列,在at bat更改时获取下一个值,并将该值用于插入

CREATE SEQUENCE at_bat_seq
 AS INTEGER
 START WITH 1
 INCREMENT BY 1
 MINVALUE 1
 MAXVALUE <what you want the max to be>
 NO CYCLE; 

DECLARE @at_bat int;
SET @at_bat = NEXT VALUE FOR at_bat_seq; 
按顺序创建序列
作为整数
从1开始
增加1
最小值1
最大值
无循环;
声明@at_bat int;
设置@at_bat=at_bat_seq的下一个值;

大多数限定词都是不言自明的;[NO]循环指定当值达到最大值时,是否会在最小值处重新开始。如上所述,当达到最大值时,您将得到一个错误。如果您只想在达到最大值时重新开始,请指定循环而不是无循环。

俯仰ID
已经是我的主键,但是我正在寻找一种方法来生成
AtBat_ID
,而不必创建冗余的
tbl_AtBat
表。每个at bat的所有数据都已存储在此表中。虽然这将被列入比赛和赛季的表格,尽管这实际上是一对多的关系。我桌上还有一个游戏ID和一个赛季ID;)
Pitch_ID
已经是我的主键,但我正在寻找一种方法来生成
AtBat_ID
,而不必创建冗余的
tbl_AtBat
表。每个at bat的所有数据都已存储在此表中。虽然这将被列入比赛和赛季的表格,尽管这实际上是一对多的关系。我桌上还有一个游戏ID和一个赛季ID;)天才!我使用的是VS Pro 2015,所以我很确定它有SS 2012如果我不想让它循环,我需要提供一个最大值Genius!我用的是VS Pro 2015,所以我很确定它有SS 2012如果我不想让它循环,我需要提供最大值吗