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如果我不想让它循环,我需要提供最大值吗