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