【问题标题】:Generate Random Middle Initial in TSQL在 SQL 中生成随机中间初始值
【发布时间】:2014-07-19 06:53:18
【问题描述】:

如何在 TSQL 中编写一个程序来遍历表的每一行并为中间的初始列生成一个随机字母?

【问题讨论】:

    标签: sql-server tsql data-generation


    【解决方案1】:

    您可以使用简单的 UPDATE 语句而不是为其编写程序。一个例子是(使用您的答案中的表/字段名称);

    UPDATE Contact SET conMName = CHAR(ABS(CHECKSUM(NEWID()))%26+65)
    

    【讨论】:

    • 该死的。我在那里思考问题。
    • 我其实没听说过ABS功能。这很酷。
    【解决方案2】:

    假设您的 Identity 列包含递增 1 的整数,则该标识列称为 conID,您的表称为 EDI.Contact,包含中间名的列称为 conMName,以下代码将起作用;

    DECLARE 
        @Counter INT = '1'
        , @GeneratedLetter CHAR(1)
        , @NumberOfRows INT = (SELECT COUNT(*) FROM EDI.Contact) -- Replace with your table name
        , @LetterNumber INT
    WHILE (@Counter < @NumberOfRows +1)
    BEGIN
    SET @LetterNumber = (CAST(RAND(CHECKSUM(NEWID())) * 26 as INT) + 1)
    IF @LetterNumber = '1' 
    SET @GeneratedLetter = 'A'
    ELSE IF @LetterNumber = '2'
    SET @GeneratedLetter = 'B'
    ELSE IF @LetterNumber = '3'
    SET @GeneratedLetter = 'C'
    ELSE IF @LetterNumber = '4'
    SET @GeneratedLetter = 'D'
    ELSE IF @LetterNumber = '5'
    SET @GeneratedLetter = 'E'
    ELSE IF @LetterNumber = '6'
    SET @GeneratedLetter = 'F'
    ELSE IF @LetterNumber = '7'
    SET @GeneratedLetter = 'G'
    ELSE IF @LetterNumber = '8'
    SET @GeneratedLetter = 'H'
    ELSE IF @LetterNumber = '9'
    SET @GeneratedLetter = 'I'
    ELSE IF @LetterNumber = '10'
    SET @GeneratedLetter = 'J'
    ELSE IF @LetterNumber = '11'
    SET @GeneratedLetter = 'K'
    ELSE IF @LetterNumber = '12'
    SET @GeneratedLetter = 'L'
    ELSE IF @LetterNumber = '13'
    SET @GeneratedLetter = 'M'
    ELSE IF @LetterNumber = '14'
    SET @GeneratedLetter = 'N'
    ELSE IF @LetterNumber = '15'
    SET @GeneratedLetter = 'O'
    ELSE IF @LetterNumber = '16'
    SET @GeneratedLetter = 'P'
    ELSE IF @LetterNumber = '17'
    SET @GeneratedLetter = 'Q'
    ELSE IF @LetterNumber = '18'
    SET @GeneratedLetter = 'R'
    ELSE IF @LetterNumber = '19'
    SET @GeneratedLetter = 'S'
    ELSE IF @LetterNumber = '20'
    SET @GeneratedLetter = 'T'
    ELSE IF @LetterNumber = '21'
    SET @GeneratedLetter = 'U'
    ELSE IF @LetterNumber = '22'
    SET @GeneratedLetter = 'V'
    ELSE IF @LetterNumber = '23'
    SET @GeneratedLetter = 'W'
    ELSE IF @LetterNumber = '24'
    SET @GeneratedLetter = 'X'
    ELSE IF @LetterNumber = '25'
    SET @GeneratedLetter = 'Y'
    ELSE IF @LetterNumber = '26'
    SET @GeneratedLetter = 'Z'
    UPDATE EDI.Contact -- Replace with your table name
    SET conMName = @GeneratedLetter -- Replace with column that holds middle names
    WHERE conId = @Counter -- Replace with identity column name
    SET @Counter = (@Counter + 1)
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2018-03-10
      • 1970-01-01
      • 2013-03-15
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多