Generating random strings with T-SQL

前端 未结 27 1845
青春惊慌失措
青春惊慌失措 2020-11-29 18:10

If you wanted to generate a pseudorandom alphanumeric string using T-SQL, how would you do it? How would you exclude characters like dollar signs, dashes, and slashes from

27条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-29 18:48

    I use this procedure that I developed simply stipluate the charaters you want to be able to display in the input variables, you can define the length too. Hope this formats well, I am new to stack overflow.

    IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND object_id = OBJECT_ID(N'GenerateARandomString'))
    DROP PROCEDURE GenerateARandomString
    GO
    
    CREATE PROCEDURE GenerateARandomString
    (
         @DESIREDLENGTH         INTEGER = 100,                  
         @NUMBERS               VARCHAR(50) 
            = '0123456789',     
         @ALPHABET              VARCHAR(100) 
            ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
         @SPECIALS              VARCHAR(50) 
            = '_=+-$£%^&*()"!@~#:', 
         @RANDOMSTRING          VARCHAR(8000)   OUT 
    
    )
    
    AS
    
    BEGIN
        -- Author David Riley
        -- Version 1.0 
        -- You could alter to one big string .e.e numebrs , alpha special etc
        -- added for more felxibility in case I want to extend i.e put logic  in for 3 numbers, 2 pecials 3 numbers etc
        -- for now just randomly pick one of them
    
        DECLARE @SWAP                   VARCHAR(8000);      -- Will be used as a tempoary buffer 
        DECLARE @SELECTOR               INTEGER = 0;
    
        DECLARE @CURRENTLENGHT          INTEGER = 0;
        WHILE @CURRENTLENGHT < @DESIREDLENGTH
        BEGIN
    
            -- Do we want a number, special character or Alphabet Randonly decide?
            SET @SELECTOR  = CAST(ABS(CHECKSUM(NEWID())) % 3 AS INTEGER);   -- Always three 1 number , 2 alphaBET , 3 special;
            IF @SELECTOR = 0
            BEGIN
                SET @SELECTOR = 3
            END;
    
            -- SET SWAP VARIABLE AS DESIRED
            SELECT @SWAP = CASE WHEN @SELECTOR = 1 THEN @NUMBERS WHEN @SELECTOR = 2 THEN @ALPHABET ELSE @SPECIALS END;
    
            -- MAKE THE SELECTION
            SET @SELECTOR  = CAST(ABS(CHECKSUM(NEWID())) % LEN(@SWAP) AS INTEGER);
            IF @SELECTOR = 0
            BEGIN
                SET @SELECTOR = LEN(@SWAP)
            END;
    
            SET @RANDOMSTRING = ISNULL(@RANDOMSTRING,'') + SUBSTRING(@SWAP,@SELECTOR,1);
            SET @CURRENTLENGHT = LEN(@RANDOMSTRING);
        END;
    
    END;
    
    GO
    
    DECLARE @RANDOMSTRING VARCHAR(8000)
    
    EXEC GenerateARandomString @RANDOMSTRING = @RANDOMSTRING OUT
    
    SELECT @RANDOMSTRING
    

提交回复
热议问题