Generating random strings with T-SQL

前端 未结 27 1844
青春惊慌失措
青春惊慌失措 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条回答
  •  -上瘾入骨i
    2020-11-29 18:55

    This will produce a string 96 characters in length, from the Base64 range (uppers, lowers, numbers, + and /). Adding 3 "NEWID()" will increase the length by 32, with no Base64 padding (=).

        SELECT 
            CAST(
                CONVERT(NVARCHAR(MAX),
                    CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                    +CONVERT(VARBINARY(8), NEWID())
                ,2) 
            AS XML).value('xs:base64Binary(xs:hexBinary(.))', 'VARCHAR(MAX)') AS StringValue
    

    If you are applying this to a set, make sure to introduce something from that set so that the NEWID() is recomputed, otherwise you'll get the same value each time:

      SELECT 
        U.UserName
        , LEFT(PseudoRandom.StringValue, LEN(U.Pwd)) AS FauxPwd
      FROM Users U
        CROSS APPLY (
            SELECT 
                CAST(
                    CONVERT(NVARCHAR(MAX),
                        CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), NEWID())
                        +CONVERT(VARBINARY(8), U.UserID)  -- Causes a recomute of all NEWID() calls
                    ,2) 
                AS XML).value('xs:base64Binary(xs:hexBinary(.))', 'VARCHAR(MAX)') AS StringValue
        ) PseudoRandom
    

提交回复
热议问题