테이블의 각 행을 거쳐 중간 초기 열에 대해 임의의 문자를 생성하는 프로그램을 TSQL에 작성할 수 있습니까?TSQL에서 무작위 중간 초기 생성
0
A
답변
2
프로그램을 작성하는 대신 간단한 UPDATE 문을 사용할 수 있습니다. 예가 (답에서 표/필드 이름을 사용하여);
UPDATE Contact SET conMName = CHAR(ABS(CHECKSUM(NEWID()))%26+65)
0
Identity 열이 1 씩 증가하는 정수로 가정하고 ID 열의 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
Damnit. 나는 그 문제를 생각하려고한다. – CryptoJones
나는 실제로 ABS 기능에 대해 들어 본 적이 없다. 그거 꽤 멋지다. – CryptoJones