Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Tsql 在何处/如何创建参考号_Tsql_Entity Framework_Sql Server 2008 - Fatal编程技术网

Tsql 在何处/如何创建参考号

Tsql 在何处/如何创建参考号,tsql,entity-framework,sql-server-2008,Tsql,Entity Framework,Sql Server 2008,我正在使用实体框架和MSSQL 插入记录时,我需要插入自定义参考号。格式为YYYY-01、YYYY-02等,但新年开始时需要重置序列号 例如2011-01、2011-02、2012-01 我很好奇我是应该用扳机还是用EF或者 每年重新设置顺序编号让我有点困惑 谢谢你的建议 更新: 很抱歉,无法使代码标记与标记配合使用 -变数 DECLARE@yearINT, @seqNumINT; -尝试查找已包含当前年度的[投诉计数]表 SET@year=选择[计数年] 来自[投诉计数] 其中[Count_

我正在使用实体框架和MSSQL

插入记录时,我需要插入自定义参考号。格式为YYYY-01、YYYY-02等,但新年开始时需要重置序列号

例如2011-01、2011-02、2012-01

我很好奇我是应该用扳机还是用EF或者

每年重新设置顺序编号让我有点困惑

谢谢你的建议

更新: 很抱歉,无法使代码标记与标记配合使用

-变数 DECLARE@yearINT, @seqNumINT; -尝试查找已包含当前年度的[投诉计数]表 SET@year=选择[计数年] 来自[投诉计数] 其中[Count_Year]=YEARGetdate -如果[ComplaintCount]表中没有当前年份,则需要制作一份当前渴望的记录 IF@yearISNULL 开始 -获取当前年份并设置初始序列号以开始计算新年份 SET@year=YEARGetdate; SET@seqNum=1; -在[ComplaintCount]表中插入新的默认值 插入[投诉计数] 算上一年, 计数电流 VALUES@year, @seqNum; 终止 其他的 开始 -We在[投诉数量]表中找到了本年度的记录 -获取序列号并将其增加1 SET@seqNum=选择[当前计数] 来自[投诉计数] 其中[Count_Year]=@Year+1 -将新值插入[投诉计数]表 更新[投诉计数] 设置[当前计数]=@seqNum 其中[Count_Year]=@Year; 终止 -现在可以安全地将正确的参考号插入[投诉]表中 使现代化 更新[投诉] 设置[投诉参考]=CAST@yearASVARCHAR+“-”+演员阵容 @seqNumASVARCHAR 来自[投诉] 内接缝插入 在[投诉]上。[PK\U投诉Id]=插入。[PK\U投诉Id]

我想说是扳机。创建一个存储年份和当前记录编号的两列表,然后使用触发器查找当前年份,将计数列增加1,然后将该计数返回到触发器。在触发器中构建逻辑,如果新年不存在,则插入新年记录。我知道,如果可能的话,大多数人都喜欢避免使用触发器,但这是触发器的一种非常合法的用法,而且处理过程比每次插入都要少


当您试图审核过去的一年或回答BI问题时,每年有一行及其相关计数在将来可能会很有用。

您预计每年有多少记录?大概在2公里左右。我正在处理一个触发器来管理参考号,但这似乎是一个糟糕的方法。选择CreatedYear+'-'+IdField-ISNullSELECT MINIdField FROM db WHERE db.CreatedYear=CreatedYear,0+1问题是id不会在每年新年开始时重置。您可以添加更多的数学来计算差异,但不必在每次插入时进行记录计数,这将导致大量开销。您可以扩展您的答案吗?这是最简单的部分,但是原子性、创建无间隔序列、自动添加新年等等呢?添加新年就像检查和添加你试图增加的年份没有记录一样简单。原子性?由于每年只有2k次插入,我认为这不会成为sql引擎要处理的问题。差距?如果记录有错误,或被用户删除。。。将会有一个缺口。。。和引擎自动生成的顺序键没有什么不同。所以你说如果不好的事情不会发生,你不需要在代码中阻止它?若两个并发操作从序列中请求id,则可以插入重复的编号。如果两个并发操作创建了新的一年,您将有两个序列。如果对没有间隙的序列有要求,那么错误也应该回滚序列中的更改。2k看起来不多,但在异步批处理中也可以是20x100条记录。这比创建表和触发器需要多得多。由于您在更新增量的同时返回值,因此自动获得事务是原子事务的保证,因为必须发生锁才能更新。至于间隙,如果这是一个要求,那么你是正确的,它将需要更多的代码。我没有从问题中得到感觉,他正在寻找一个人为他编写触发器。只是建议是否有更好的方法。我的回答是,在这个使用场景中,触发器是合法的。