SQL Server Computed Column - первичный ключ для буквенных символов - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно создать, а затем сохранить в таблице БД альфа-представление первичного ключа.

Я нашел замечательный PHP-скрипт, который делает именно то, что я хочу.Тем не менее, я не уверен, что лучше всего реализовать это непосредственно в SQL Server.

Я считаю, что мне следует использовать постоянный вычисляемый столбец ..?Однако я не уверен, как преобразовать функцию PHP в функцию, которая работает в SQL Server.Любая помощь / образование будет принята с благодарностью.

Код 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"

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете добавить определенную пользователем функцию для этого

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;

и возвращает:

NCHENV
0 голосов
/ 25 февраля 2019

Рассматривали ли вы convert()?

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

Это добавляет новый вычисляемый столбец с именем pk_string, который является строковым представлением pk_column.

...