自动生成与主键分开的唯一ID

时间:2017-11-25 22:57:22

标签: sql-server

我有一个关系数据库(我是新创建的),它有许多与棒球统计跟踪和分析相关的表格。我目前正在处理的表是tbl_PitchLog表,用于跟踪蝙蝠中的音高。

我想要做的是消除对击球桌的需要,并且只为一组球场使用At-Bat Unique 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

2 个答案:

答案 0 :(得分:2)

您没有指定您正在使用的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; 

大多数限定词都是不言自明的; [NO] CYCLE指定值是否会在达到最大值时从最小值开始。如上所述,当你达到最大值时,你会收到一个错误。如果你只想让它在达到最大值时重新开始,那么指定CYCLE而不是NO CYCLE。

答案 1 :(得分:0)

使用tbl_PitchLog作为主键创建Pitch_ID表,同时从主表中获取外键。

您要找的是one to one relationship