表Client
:
Id (PK), int, not null (IDENTITY)
NoClient, int, not null
表格(线框):
- NoClient 字段应该是一个数字
- NoClient 字段应该是唯一的
- 如果为 null,则应自动生成字段 NoClient
- NoClient 字段仅供参考
- NoClient 字段不是主键
- NoClient 字段不是身份列
如何以 SQL 方式解决该问题?
编辑。我说的是NoClient
专栏,不是ID
。
表Client
:
Id (PK), int, not null (IDENTITY)
NoClient, int, not null
表格(线框):
如何以 SQL 方式解决该问题?
编辑。我说的是NoClient
专栏,不是ID
。
严格解释这些规则,没有解决办法。这些规则之一要么不正确,要么不精确。您无法使用 AFTER 触发器解决它,因为您无法尝试将空白插入数字字段,也无法使用 BEFORE 触发器。您也不能使用默认值。
现在,如果你的意思是“当留空”意味着“当留空”,那么你可以用一个非常精心制作的 BEFORE TRIGGER 来解决它。(或 AFTER TRIGGER,如果您可以将字段更改为可为空的 int)
如果您的意思是“留空时”意味着您没有在插入/更新中提及该列,那么您可以通过将通过 NewID 对 GUID 的调用转换为非常大的调用来使用精心设计的默认值数字。
作为旁注,我会告诉设计师回去重新设计它,因为无论你最终想出什么解决方案,它的可扩展性都不是很好,而且 PITA 可以正确完成。您必须基本上锁定整个表(从读取和写入),进行整个表/索引扫描以确保您提出的值是唯一的。您可能应该使用 ID 字段作为客户端编号,可能使用不以 0 开头的内容来播种身份。
首先执行查询以SET IDENTITY OFF,插入您的 ID,然后再次 SET IDENTITY ON。