如何在允许手动用户输入的同时设计自动增量字段?

时间:2013-05-30 21:49:18

标签: c# sql-server-2005

Client表:

Id (PK), int, not null (IDENTITY)
NoClient, int, not null

表格(线框):

enter image description here

  • 字段NoClient应为数字
  • 字段NoClient应该是唯一的
  • 如果为null
  • ,则应自动生成字段NoClient
  • 字段NoClient仅供参考
  • 字段NoClient不是主键
  • 字段NoClient不是标识列

如何以SQL方式解决这个问题?

编辑。我说的是NoClient列,而不是ID

2 个答案:

答案 0 :(得分:4)

严格解释这些规则,没有解决方案。其中一条规则要么不正确,要么不准确。您无法使用AFTER触发器解决此问题,因为您无法尝试将空白插入数字字段,也不能使用BEFORE触发器。您也不能使用默认值。

现在,如果您的意思是“当留空时”意味着“当保留为空”时,您可以使用非常精心设计的BEFORE TRIGGER解决它。 (或者,如果您可以将字段更改为可以为空的字段,则为“触发器”)

如果您的意思是“当留空”意味着您没有在插入/更新中提及该列,那么您可以通过精心设计的默认设置,通过NewID将GUID转换为GUID来实现非常多。

作为旁注,我会告诉设计师返回并重新设计它,因为无论你最终提出什么解决方案,它都不是很可扩展,并且PITA可以正确完成。您必须基本上锁定整个表(从读取和写入),执行整个表/索引扫描以确保您提出的值是独特的。您可能应该使用ID字段作为客户端否,可能会使用不以0开头的内容来播种身份。

答案 1 :(得分:0)

首先执行查询SET IDENTITY OFF,插入您的ID,然后再次设置ID IDENTITY。