Witam,
Temat wpisu może jest trochę enigmatyczny ale już wyjaśniam o co mi chodzi. W SQL SERVER Potrzebuję stworzyć tabelę która będzie zawierała milion losowych danych. Ma to być imitacja tabeli która zawiera trzy kolumny (ID_Osoby, Imie_Osoby, Nazwisko_Osoby).
Jeżeli chodzi o wygenerowanie miliona rekordów ID_Osoby to tutaj nie ma problemu (jest to klucz główny który sam się inkrementuje). Problem zaczyna się przy Imieniu i Nazwisku. Nie chodzi tutaj oczywiście o prawdziwe imiona i nazwiska, chodzi raczej o ciąg znaków przypominający je np. 'sbbabs uyygsavwn'.
Nie jestem w stanie napisać kodu który właśnie wygeneruje podobne ciągi znaków z określonego wcześniej 'afabetu'. Za każdym razem dostaję albo jeden losowy znak, albo ich ciąg np. 'bcdefg mnopr'.
Zależałoby mi aby wygenerować Imiona i Nazwiska które będą się składać z losowych długości losowych znaków ze zdefiniowanego wcześniej 'alfabetu'. Jestem na etapie w którym potrzebuję funkcji która będzie powtarzać moją funkcję losową ilość razy. Wklejam mój kod poniżej:
CREATE TABLE Test (ID_Osoby integer IDENTITY(1,1) PRIMARY KEY,
Imie_Osoby varchar(25),
Nazwisko_Osoby varchar(25))
GO
DECLARE @alfabet varchar(33) = 'abcdefghijklmnoprstuówxyzęąśłżźćń', -- zbiór liter do wyboru (z których ma powstać Imie i Nazwisko)
@Row integer
SET @Row = 0 -- Ustawiam punkt startowy pętli na '0'
WHILE @Row < 1000000 -- I wskazuję ile razy system ma ją wykonać (tak długo jak punkt startowy będzie mniejszy niż '1000000')
BEGIN
INSERT INTO Test (Imie_Osoby, Nazwisko_Osoby)
VALUES (
(SUBSTRING (@Alfabet, CONVERT(INT, rand() * 33), 1)), -- Imię Osoby które składa się z losowej litery
(SUBSTRING (@Alfabet, CONVERT(INT, rand() * 33), 1)) -- Nazwisko Osoby które składa się z losowej litery
)
SET @Row = @Row + 1 -- Określam wzrost o 1 dzięki czemu każda następny loop będzie mógł się odbyć 'od nowa' ponieważ wartość startowa będzie zawsze większa o 1 od poprzedniej, aż do 1000000
END
Tak jak pisałem wyżej, musiałbym powtórzyć tą część kodu (SUBSTRING (@alfabet, CONVERT(INT, rand() * 33), 1)) losową ilość razy aby system mógł wylosować jakąś literę z alfabetu a następnie zrobić to kolejne X razy tak aby powstało 'Imię' i 'Nazwisko'.
Jedyne rozwiązanie które przychodziło mi do głowy to:
(CONVERT(INT, rand() * 33), 1) + 2) "MNOŻONE PRZEZ" (SUBSTRING (@alfabet, CONVERT(INT, rand() * 33), 1)) - niestety powoduje to że dostajemy dane które wyglądają tak 'vvvv uuuuuu'. Czyli losowa litera powtórzona losową ilość razy.
Próbowałem bawić się z CHAR/ANSII/GET ID itp jednak w tym wypadku kluczowe jest używanie wcześniej określonego zbioru znaków.
Czy przychodzi komuś coś na myśl odnośnie rozwiązania tego problemu?
Jak zrobić żeby za każdym razem SQL wybierał nową literę i zapętlał ten proces losową liczbę razy?
Z góry dziękuję za pomoc.