如何按字母顺序实现自动增量列值?

时间:2017-07-03 11:37:47

标签: sql sql-server

我有一个表tbl_login,我希望我的列ID可以自动增加,也可以按字母顺序排列。请帮我。提前致谢。

ID      Name    Pass
101A    Mohan   1234
102B    Madan   4321
103C    Ram     12334

2 个答案:

答案 0 :(得分:1)

您总是可以将数值转换为alphabatical形式,因此您应该存储数值(101)并在需要时使用fn_NumericToAlphabatical之类的函数将其转换为101A(您应该使用循环和{{1自己编写此函数)功能)

您应该使用序列生成数值

您可以创建计算持久列以提高性能

答案 1 :(得分:1)

非常好的问题。

i)此ID可以生成多少位数,例如10,000或1,00,000或更多

ii)你应该从101开始随机抛出更多的例子。特别是从4位数和5位数的少数几个例子。

iii)你将如何实现它。像你将插入单行或你将插入批量行。一旦要求明确,实施的SCRIPT可以根据需要进行优化和改变。

iv)测试我的脚本。首先从101到921之间的任何数字彻底测试

只需更改@input

的值即可
DECLARE @Input INT = 127--change here
DECLARE @Output VARCHAR(10) = ''
    ,@TempOutput VARCHAR(10) = ''
DECLARE @Base INT = 100
    ,@z INT = 26
    ,@Rem INT
DECLARE @Tempinput INT = @Input

WHILE (
        @Tempinput > 0
        AND @input > @Base + @z
        )
BEGIN
    SET @TempOutput = ''

    IF (@Tempinput > @Base)
    BEGIN
        SET @Rem = @Tempinput % @Base
    END

    IF (
            (@Rem % @z) = 0
            AND (@Rem / @z) > 1
            )
    BEGIN
        SET @Tempinput = (@Rem / @z) - 1
        SET @Rem = @Rem % @z

        PRINT '23'
    END
    ELSE
    BEGIN
        IF (@Rem > @z)
        BEGIN
            SET @Tempinput = @Rem / @z
            SET @Rem = @Rem % @z

            PRINT @Tempinput
        END
        ELSE
        BEGIN
            SET @Rem = @Tempinput % @z
            SET @Tempinput = @Tempinput / @z
        END
    END

    IF (
            @Rem > 0
            AND @Rem <= @z
            )
        SET @TempOutput = CHAR(@Rem + 64)
    ELSE IF (@Rem = 0)
        SET @TempOutput = 'Z'
    SET @Output = @TempOutput + @Output
END

IF (@input <= @Base + @z)
    SET @Output = CHAR((@input % @Base) + 64)

SELECT cast(@Input AS VARCHAR(10)) + @Output