How do I generate random number for each row in a TSQL Select?

前端 未结 19 1231
逝去的感伤
逝去的感伤 2020-11-22 07:03

I need a different random number for each row in my table. The following seemingly obvious code uses the same random value for each row.

SELECT table_name,          


        
19条回答
  •  日久生厌
    2020-11-22 07:40

        DROP VIEW IF EXISTS vwGetNewNumber;
        GO
        Create View vwGetNewNumber
        as
        Select CAST(RAND(CHECKSUM(NEWID())) * 62 as INT) + 1 as NextID,
        'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'as alpha_num;
    
        ---------------CTDE_GENERATE_PUBLIC_KEY -----------------
        DROP FUNCTION IF EXISTS CTDE_GENERATE_PUBLIC_KEY;  
        GO
        create function CTDE_GENERATE_PUBLIC_KEY()
        RETURNS NVARCHAR(32)
        AS 
        BEGIN
            DECLARE @private_key NVARCHAR(32);
            set @private_key = dbo.CTDE_GENERATE_32_BIT_KEY();
            return @private_key;
        END;
        go
    
    ---------------CTDE_GENERATE_32_BIT_KEY -----------------
    DROP FUNCTION IF EXISTS CTDE_GENERATE_32_BIT_KEY;  
    GO
    CREATE function CTDE_GENERATE_32_BIT_KEY()
    RETURNS NVARCHAR(32)
    AS 
    BEGIN
        DECLARE @public_key NVARCHAR(32);
        DECLARE @alpha_num NVARCHAR(62);
        DECLARE @start_index INT = 0;
        DECLARE @i INT = 0;
        select top 1 @alpha_num = alpha_num from vwGetNewNumber;
            WHILE @i < 32
            BEGIN
              select top 1 @start_index = NextID from vwGetNewNumber;
              set @public_key = concat (substring(@alpha_num,@start_index,1),@public_key);
              set @i = @i + 1;
            END;
        return @public_key;
    END;
        select dbo.CTDE_GENERATE_PUBLIC_KEY() public_key;
    

提交回复
热议问题