【发布时间】:2011-01-26 10:08:20
【问题描述】:
是否有一些 SQL 编码可以在单击获取默认按钮时生成唯一标识符?我正在寻找一种系统来在将物理纸质文件放入存储之前对其进行编号。问题是有 3 个办事处,每个办事处都需要一个序号系统(即 P001、P002、P003 和 C001、C002...)。
下面是我到目前为止生成唯一 ID 号前缀的代码。
SELECT CASE WHEN ptBranch=3 THEN 'P' WHEN ptBranch=4 THEN 'A' ELSE 'C' END + CONVERT(VARCHAR(2),GETDATE(),12) FROM LAMatter WHERE ptMatter = $Matter$
这个想法是代码可以生成整个文件编号,例如P110001、P110002(其中P、C或A表示文件所在的办公室,11表示文件入库的年份)
任何指针都非常感谢
【问题讨论】:
-
sequential方面有多重要?插入失败会留下任何间隙吗? -
不幸的是真的很重要 - 因为它可以更容易地识别存储中丢失的文件(归档后它们一直被取入和取出) - 显然,如果它们是数字,你不会知道是文件丢失还是没有分配数字
-
好吧,这完全排除了
identity,因为这根本不能保证这一点(即使您有 3 个不同的表,您仍然可以从回滚事务中获得间隙) -
我刚刚注意到你说你想生成一个新的“点击获取默认按钮的唯一标识符” - 这是否意味着数字的生成发生在你有任何数据要插入之前(例如打印标签或其他东西)?如果是这样,如果生成了一个数字但从未使用过会发生什么?还会多人处理这些文件吗?
-
@martin 回顾您的
row_number想法,而不是order by id,您可以按字段本身订购吗?所以任何已分配编号的文件都会进入列表顶部,下次单击“获取默认值”时,您将获得下一个编号?不太确定这是否有意义,但我希望答案在于row_number领域
标签: sql sql-server