发布
社区首页 >问答首页 >SQL:如何自动增加数据库中的值

SQL:如何自动增加数据库中的值
EN

Stack Overflow用户
提问于 2016-11-01 20:41:45
回答 3查看 1.4K关注 0票数 0

我通过从文本框中获取名称和姓氏的第一个双字符来创建自定义CustomerID,如下所示:

代码语言:javascript
代码运行次数:0
复制
 string CustomID = (FirstNameTxtbox.Value.Substring(0, 2) + LastNametxtbox.Value.Substring(0, 2));

为了避免重复的CustomerID,我试图:

获取第五个值,即int,因为前4个值是字符。然后再加1。

我的尝试:

代码语言:javascript
代码运行次数:0
复制
string s =  cmd.CommandText= " Select MAX(CustomerID) from Customers";
string CustomID = (FirstNameTxtbox.Value.Substring(0, 2) + LastNametxtbox.Value.Substring(0, 2) + (Convert.ToInt32(s)+1)) ;

示例:

第一name=麦

姓=岛

CustomerID = MASH1

下一个值将是例如KAAR2

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-02 05:35:37

使主键成为一个自动增量整数,而CustomerID是一个基于ID计算的字符串,这样它就不会重复。

您可以通过以下方式设置CustomerID

  1. 基于自动增量ID的计算字段
  2. 在insert上触发并设置CustomerID的触发器
  3. 后端的自定义代码,添加customer对象,检索主键并设置CustomerID

您的CustomerID可以类似于0000001

例:第一个客户的主键是1,CustomerID000001,下一个客户是000002等等。

票数 1
EN

Stack Overflow用户

发布于 2016-11-01 20:53:47

不推荐您的实践,您应该设计一个带有自动增量小值(如整数)的主键,请记住,表是在聚集索引(主键)上进行物理排序的,并且您的非聚集索引是根据主键确定的。

如果仍然需要,可以将合并的值添加到另一个字段中,如果您的查询是基于它,则为其创建一个非聚集索引。

票数 2
EN

Stack Overflow用户

发布于 2016-11-02 05:01:57

是的,主键( ID )是必需的,但是客户ID可以是自定义字符串,就像‘任何’。

我你想像这样生成客户ID

*首个name= Mak

姓=岛

CustomerID = MASH1

下一个值将为例如KAAR2 2*

使用前端生成Server /Oracle中的KA(第一)AR(最后)+序列。

代码语言:javascript
代码运行次数:0
复制
CREATE SEQUENCE [dbo].[CustomerId_Generation] 
 AS [bigint]
 START WITH 1
 INCREMENT BY 1
 MINVALUE -9223372036854775808
 MAXVALUE 9223372036854775807
 CACHE 
GO

获取序列值,然后添加到数据库中。

有一种情况是,如果您遵循这种方法,您的代码也可以处理用于返回客户的相同的CutomerID,而不是重复的相同的CutomerID

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40368313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档