0

Client

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

表格(线框):

在此处输入图像描述

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

如何以 SQL 方式解决该问题?

编辑。我说的是NoClient专栏,不是ID

4

2 回答 2

4

严格解释这些规则,没有解决办法。这些规则之一要么不正确,要么不精确。您无法使用 AFTER 触发器解决它,因为您无法尝试将空白插入数字字段,也无法使用 BEFORE 触发器。您也不能使用默认值。

现在,如果你的意思是“当留空”意味着“当留空”,那么你可以用一个非常精心制作的 BEFORE TRIGGER 来解决它。(或 AFTER TRIGGER,如果您可以将字段更改为可为空的 int)

如果您的意思是“留空时”意味着您没有在插入/更新中提及该列,那么您可以通过将通过 NewID 对 GUID 的调用转换为非常大的调用来使用精心设计的默认值数字。

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

于 2013-05-30T22:06:45.053 回答
0

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

于 2013-05-30T21:52:42.197 回答