Генерация случайных средних инициалов в TSQL

Как я мог написать программу на TSQL, чтобы пройти через каждую строку таблицы и сгенерировать случайную букву для среднего начального столбца?

2 ответа

Решение

Вы можете использовать простой оператор UPDATE вместо того, чтобы писать для него программу. Примером может быть (использование имен таблиц / полей из вашего ответа);

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

Предполагая, что в вашем столбце Identity содержатся целые числа, которые увеличиваются на единицу, столбец идентификаторов назывался 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
Другие вопросы по тегам