自动增加varchar列(可选)

时间:2018-11-14 10:34:38

标签: sql linq ef-core-2.0

我有一个带有guid标识符的表,并且一个字段是可以由用户指定的5个字符的字符串,但是它是可选的,并且每个用户应该唯一。我正在寻找一种使此字段始终存在的方法,即使用户未指定它也是如此。最简单的方法是将其设置为“ 00001”,“ 00002” ...等,以防用户未指定,将其存储为此类。我正在使用SQL和实体框架核心。实现此目标的最佳方法是什么?

编辑:也许触发器将在插入后检查是否未指定该字段,然后仅获取当前行号并将其转换为字符串?这有意义吗? 干杯

1 个答案:

答案 0 :(得分:0)

可以通过以下方式将字段设置为'00001'来定义字段:
 NOT NULL DEFAULT right('0000' || to_char(SomeSequence.nextval),5)(适用于您所连接的DBMS的伪代码)。
与您的EDIT中的解决方案相比,这至少可以确保2个不同用户同时插入2个插入内容并为其分配不同的值。

真正的问题来自列上的unique约束。将手动输入与计算值混合时,这种方法不能很好地工作。
如果作为用户,我(手动)输入00005,则当SomeSequence达到5时,插入将失败。

我认为无论您如何实现值的生成(序列,触发器,外部代码等),都会存在此问题。
即使您可以编写一些其他(可能是复杂的)逻辑来管理它,也可能会降低并发性。