这是我第一次在论坛上发布问题,因为我通常更喜欢自己研究并找到答案,但我是程序员,足以承认数据库编程是我的致命弱点。
我正在寻找一个 base31 身份列以在我的数据库中使用,或者从我正在阅读的内容中,将 MAP SQL 身份列映射到 Base32 列。
我正在尝试在 00000-ZZZZZ 的范围内创建唯一的 5 位字母数字序列。(例如 0BG85)
我意识到字母数字代码并不理想,因为最终您的序列会拼出许多业务不合适的单词,因此我将消除元音 (a,e,i,o,u)。因此Base31。这个项目的限制因素是我使用的是 Code39 条形码实现,它将我限制在 0-9 和 AZ(仅限大写字母)。
我对数据库编程的接触有限,我最初的想法是查询生成的最后一个 ID,然后通过 C# 类通过算法增加下一个 ID。我的直觉和我一直在阅读的所有内容都告诉我,这是执行任务的一种迟钝不雅的方式。
我的研究使我找到了这几个资源
我想知道我是否使用了第二个链接的功能
略微编辑
Declare @alldigits as varchar(31);
Set @alldigits='0123456789BCDFGHJKLMNPQRSTVWXYZ'
并通过存储过程或触发器(以前从未使用过触发器)向其发送标识列值,这可以接受吗?我在正确的轨道上吗?
**已找到答案,但不允许我(新用户)在 5 小时内发布我自己的答案**
FUNCTION dbo.CreateBase31ID
(
@val as BigInt,
@base as int
)
returns varchar(63)
as
Begin
/* From http://sqltips.wordpress.com/2009/01/12/tsql-function-to-convert-decimal-to-hex-octal-or-any-other-base/ */
/* blog text:
SQL Tips by Namwar Rizvi
Frequently I see the questions in newsgroups about a function to convert
integer value to other bases like base 2 (binary), base 8 (octal) and base 16(hex).
Following TSQL function, which was orginally mentioned by Itzik Ben-Gan
in his book Inside Microsoft SQL Server 2005:TSQL Querying, provides you the
ability to convert a given integer into any target base.
I have just updated the function with more meaningful names and added some
comments to clear the logic.
*/
/* Check if value is valid and if we get a valid base (2 through 36) */
If (@val<0) OR (@base < 2) OR (@base> 36) Return Null;
/* variable to hold final answer */
Declare @answer as varchar(63);
/* Following variable contains all
possible alpha numeric letters for any valid base
*/
Declare @alldigits as varchar(31);
Set @alldigits='0123456789BCDFGHJKLMNPQRSTVWXYZ'
/* Set the initial value of
final answer as empty string
*/
Set @answer='';
/* Loop while the source value remains greater than 0 */
While @val>0
Begin
Set @answer=Substring(@alldigits,@val % @base + 1,1) + @answer;
Set @val = @val / @base;
End
/* Return the final answer */
return @answer;
End
向函数发送标识列值时,此函数正常工作。它完美地映射到我手动计算的测试值。我要真诚地感谢 Namwar Rizvi 的原始代码示例和 Brian Biales(来自我之前帖子中的第二个链接)解释并真正分解了 Namwar 的原始功能。我的老板认为我是个天才,但实际上,如果没有互联网和乐于助人的程序员为我指路,我只不过是个门外汉。
我希望这可以帮助其他人。