如何在 SQL SERVER 2008 中启用字母自动递增(A、B、C、D ...)?
Posted
技术标签:
【中文标题】如何在 SQL SERVER 2008 中启用字母自动递增(A、B、C、D ...)?【英文标题】:How to enable auto-increment in letters(A, B, C, D...) in SQL SERVER 2008? 【发布时间】:2013-12-23 17:45:18 【问题描述】:我是 SQL SERVER 的新手。我找到了如何为列自动增加数字。
CREATE TABLE Region
(
RegionId int IDENTITY(1,1),
RegionName varchar(50),
);
问题:如何在这样的字母(A,B,C,D...)中启用“自动递增”?
【问题讨论】:
无论何时使用IDENTITY
列,都不应关心 或以任何方式依赖 生成的实际数值。它应该被视为一个不透明的 blob,您碰巧能够将其存储在数字列中。因此,即使您的第一部分(生成数字序列)也是不正确的,如果您在某种程度上依赖于生成的数字序列。
这可能会有所帮助 - sqlteam.com/article/…
您自己创建了一个序列函数来为您完成它,您可以调用它来为您提供下一个值。但坦率地说 - 我不明白你为什么要像这样“自动递增”一个字符?
@AllanS.Hansen,即使对人类没有意义,为区域命名也是课程作业
@Aishvarya,谢谢你的文章。我现在就读
【参考方案1】:
虽然 Damien 在 cmets 中正确地说,值可能存在差距,并且依赖连续的值并不是一个好主意,但如何将 RegionName 添加为计算列:
ALTER TABLE Region
ADD RegionName AS CHAR(RegionID + 64)
这是有效的,因为 'A' 的 ASCII 值是 65 - 所以假设你的身份列从值 1 开始,增量为 1,你应该得到 CHAR (64+1)
= CHAR(65)
- A
的代码,2 = CHAR(66) = B
等等。
当然,这仅基于以下假设有效:您以后不想将 RegionName 更改为更友好的值(在计算列时),并且您将只有一小部分值 - 例如,什么如果有超过 26 个区域,您会期望发生这种情况吗?根据我的想法,在那之后你会开始得到一些时髦的结果——符号,然后是小写字母等。如果你不熟悉这个想法,请查看ASCII table。如果您想要更聪明的东西来开始创建名称为 AA、AB、AC 等的区域。我建议您遵循 Aishvarya 在 cmets 中发布的出色序列生成链接。
SQL Fiddle example
【讨论】:
所有两个字母组合的序列生成的链接似乎被禁用(可能是由于时间的原因),是否有其他参考或链接执行相同的操作? 那个链接对我来说还可以吗? sqlteam.com/article/…我不知道你为什么要问我而不是直接问Aishvarya
。
谢谢你的链接,我没有在 cmets 看到她的名字
这个答案非常适合我的目的。我只需要在报告中将行号显示为字符 A-M。很好的答案。以上是关于如何在 SQL SERVER 2008 中启用字母自动递增(A、B、C、D ...)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server Express 2008 中创建新数据库并允许连接?