SQL 服务器计算列 - 字母字符的主键

SQL Server Computed Column - primary key to alpha characters

我需要创建主键的 alpha 表示,然后将其存储在数据库 table 中。

我找到了一个很棒的 PHP 脚本,它完全符合我的要求。但是,我不确定直接在 SQL 服务器中实现它的最佳方法。

我认为我应该使用持久计算列..?但是,我不确定如何将 PHP 函数转换为在 SQL 服务器中工作的函数。任何 assistance/education 将不胜感激。

PHP代码:

function alphaID($n)
{
    for ($r = ""; $n >= 0; $n = intval($n / 26) - 1) {
        $r = chr($n%26 + 0x41) . $r;
    }
    return str_pad($r, 6, 'A', STR_PAD_LEFT);
}

echo alphaID(0) . "<br>"; // returns "AAAAAA"
echo alphaID(1) . "<br>"; // returns "AAAAAB"

你考虑过convert()吗?

alter table t as pk_string as (convert(varchar(255), pk_column));

这将添加一个名为 pk_string 的新计算列,它是 pk_column 的字符串表示形式。

您可以为此添加一个用户定义函数

create /*or alter*/ function fnIntToPaddedBase26(@i int) 
returns varchar(7) 
as
begin
  declare @out varchar(7) = '';

  if @i = 0
    set @out = 'A';
  else
    set @i += 1;

  while @i > 0
    select @i -= 1, @out = char(ascii('A') + @i%26) + @out, @i/=26;

  if len(@out)<6
    set @out = right(replicate('A',6)+@out,6);

  return @out;
  end;
GO

然后使用UDF

select dbo.fnIntToPaddedBase26(167854565) as int2char;

returns:

NCHENV