sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan genereres testdata i SQL Server

Når du tester din applikations funktionalitet eller ydeevnen af ​​en specifik lagret procedure eller en ad-hoc-forespørgsel i udviklingsmiljøet, skal du have data gemt i dine udviklingsdatabaser, der er typiske eller ligner de data, der er lagret i produktionsdatabaserne. Dette skyldes, at ydeevnen af ​​en forespørgsel, der behandler 50 poster, vil være forskellig fra ydeevnen af ​​den samme forespørgsel, der behandler 50 millioner rækker. Gendannelse af en kopi af produktionsdatabasen til udviklingsdatabaseserveren til testformål er ikke altid en gyldig mulighed, på grund af de kritiske data, der er gemt i disse databaser og bør ikke være åben for alle medarbejdere at se, medmindre du udvikler en ny applikation, og der er endnu ingen produktionsdatabase.

Det bedste og mest sikre alternativ er at fylde udviklingsdatabasetabellerne med testdata. Generering af testdata er nyttig til at teste applikationens ydeevne eller en ny funktionalitet uden at ændre produktionsdataene. Der er ingen enkelt og enkel måde at generere testdata, der passer til alle scenarier, især når du skal generere store mængder data for at teste ydeevnen af ​​komplekse forespørgsler og transaktioner, hvor du bør dække alle mulige kombinationer af testsager.

For at fylde en tabel med en stor mængde data er den nemmeste måde at skrive et simpelt script, der bliver ved med at indsætte identiske poster i databasetabellen med det antal dubletter, du har brug for. Men problemet er, at SQL Server Query Optimizer vil bygge en anden plan på udviklingsdatabasen end den, der er bygget på produktionsdatabasen på grund af forskellen i datafordelingen. For eksempel vil scriptet nedenfor udfylde elevtabellen med 100.000 redundante testposter ved hjælp af GO-nummeret erklæring:

INSERT INTO Students (FirstName, LastName, BirthDate, STDA-adresse) VALUES ('John','Horold','2005-10-01','London, St15')GO 25000INSERT INTO Students (Fornavn, Efternavn, Fødselsdato, STDAddress) VALUES ('Mike','Zikle','2005-06-08','London, St18')GO 25000INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faruk','Cedrik',' 2005-03-15','London, St24')GO 25000INSERT INTO Students (Fornavn, Efternavn, Fødselsdato, STDA-adresse) VÆRDIER ('Faisal','Ali','2005-12-05','London, St41') GO 25000

En anden mulighed er at generere tilfældige data afhængigt af datatypen for hver kolonne. ID-kolonnen med IDENTITY-egenskaben vil automatisk generere sekvensnumre uden behov for nogen kodningsindsats fra din side. Men hvis du planlægger at generere tilfældige karakterer til eleverne, kan du drage fordel af RAND() T-SQL-funktion og cast resultatet som den nødvendige numeriske datatype. For eksempel vil nedenstående script generere 100K tilfældige karakterer for eleven mellem 1 og 100 med tre forskellige datatyper:INTEGER karakterer, REAL karakterer og DECIMAL karakterer, med evnen til at kontrollere intervallerne for disse værdier afhængigt af dine matematiske og programmeringsevner , som vist nedenfor:

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()) 100 som reel)) AS Real_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 som decimal(6,2))) AS Decimal_GrageGO 100000

Generering af tilfældige navne kan også opnås ved hjælp af AdventureWorks og Northwind Microsofts testdatabaser . Du skal downloade disse databaser fra Microsofts websted, vedhæfte disse databaser til din SQL Server-instans og drage fordel af de data, der er gemt i disse databaser, for at generere tilfældige navne i din udviklingsdatabase. For eksempel indeholder DimCustomer-tabellen fra AdventureworksDW2016CTP3-databasen omkring 18K fornavne, mellemnavne og efternavne, som du kan bruge. Du kan også bruge en CROSS JOIN-sætning til at generere et stort antal kombinationer af disse navne for at overskride 18K-værdien. Følgende script kan bruges til at generere 100K fornavne og efternavne:

INSERT INTO StudentsGrades (First_Name, Last_Name)SELECT TOP 100.000 N.[FirstName],cN.[LastName]FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS JOIN AdventureworksDW2016]CTP3.[NimdCus]pre.> 

Tilfældige e-mailadresser og datoer kan også genereres fra Microsofts testdatabaser. For eksempel kan kolonnen Fødselsdato og kolonnen EmailAddress fra den samme DimCustomer-tabel give os tilfældige datoer og e-mailadresser. Nedenstående script kan bruges til at generere 100.000 kombinationer af fødselsdatoer og e-mail-adresser:

INSERT INTO StudentsGrades (fødselsdato, e-mailadresse)SELECT TOP 100000 N.BirthDate,cN.EmailAddressFROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS JOIN AdventureworksDW2016]CTP3.[imCbous.[dCbous. 

Tilfældige værdier i kolonnen Land kan også genereres ved hjælp af tabellen Person.CountryRegion fra testdatabasen AdventureWorks2016CTP3. Det kan give dig mere end 200 landenavne og koder, som du kan drage fordel af i din udviklingsdatabase. For eksempel kan du tage det som en opslagstabel til at kortlægge mellem landenavn og kode, som i scriptet nedenfor:

INSERT INTO MappedConutries (CountryRegionCode, Name)VÆLG [CountryRegionCode],[Name]FRA [AdventureWorks2016CTP3].[Person].[CountryRegion]Indsæt derefter et tilfældigt navn eller en landekode fra disse lande, der har ID svarende til et tilfældigt ID genereret mellem 1 og 238, som scriptet nedenfor:INSERT INTO StudentsGrades (Country_Name) værdier( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int)))GO 10000

For at generere tilfældige adresseværdier kan du drage fordel af de data, der er gemt i personen. Adressetabel fra AdventureWorks2016CTP3 testdatabasen. Den indeholder mere end 19K forskellige adresser med dens rumlige placering, som du nemt kan bruge i din udviklingsdatabase og tage tilfældige kombinationer fra disse værdier, på samme måde som vi gjorde i det forrige eksempel. Nedenstående script kan nemt bruges til at generere tilfældige 100.000 adresser fra tabellen Person.Address:

INSERT INTO StudentsGrades (STD_Address) værdier( (VÆLG NAVN FRA [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int)))GO 100.000

For at generere tilfældige adgangskoder til specifikke systembrugere kan vi drage fordele af CRYPT_GEN_RANDOM T-SQL funktion. Denne funktion returnerer et kryptografisk, tilfældigt genereret hexadecimalt tal med en længde på et specificeret antal bytes, genereret af Crypto API (CAPI). Den værdi, der returneres fra denne funktion, kan konverteres til en VARCHAR-datatype for at få mere meningsfulde adgangskoder, som i scriptet nedenfor, der genererer 100K tilfældig adgangskode:

INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20))GO 100000

Generering af testdata for at udfylde udviklingsdatabasetabellerne kan også udføres nemt og uden at spilde tid på at skrive scripts for hver datatype eller bruge tredjepartsværktøjer. Du kan finde forskellige værktøjer på markedet, som kan bruges til at generere testdata. Et af disse vidunderlige værktøjer er dbForge Data Generator til SQL Server . Det er et kraftfuldt GUI-værktøj til en hurtig generering af meningsfulde testdata til udviklingsdatabaserne. dbForge datagenereringsværktøj inkluderer 200+ foruddefinerede datageneratorer med fornuftige konfigurationsmuligheder, der giver dig mulighed for at emulere kolonne-intelligente tilfældige data. Værktøjet gør det også muligt at generere demodata til SQL Server-databaser, der allerede er fyldt med data, og oprette dine egne brugerdefinerede testdatageneratorer. dbForge Data Generator til SQL Server kan spare din tid og kræfter brugt på demodatagenerering ved at udfylde SQL Server-tabeller med millioner af rækker af eksempeldata, der ligner rigtige data. dbForge Data Generator til SQL Server hjælper med at udfylde tabeller med de mest anvendte datatyper såsom Basic, Business, Health, IT, Location, Payment and Person datatyper. Nedenstående figur viser, hvor nemt dette værktøj fungerer:

Når du har installeret dbForge Data Generator til SQL Server-værktøjet og kørt dette værktøj, skal du angive målservernavnet og databasenavnet i forbindelsesvinduet som vist nedenfor:

I vinduet Indstillinger kan du angive antallet af rækker, der skal indsættes i din tabel, og andre forskellige muligheder, der styrer de genererede testdatakriterier, som vist nedenfor:

Når du har tilpasset mulighederne, så de passer til dine testdatakrav, skal du klikke på -knappen, og et nyt vindue med en liste over alle tabeller og kolonner under den valgte database vil blive vist og spørger du kan vælge, hvilken tabel der skal udfyldes med testdata, som vist nedenfor:

Du skal bare vælge den tabel, du skal udfylde med data, og værktøjet vil automatisk give dig de foreslåede data i sektionen Eksempel nederst i vinduet og tilpasningsmuligheder for hver kolonne i den tabel, som du nemt kan tilpasse, som vist nedenfor:

For eksempel kan du vælge mellem de indbyggede generatorers datatyper, der kan bruges til at generere ID-kolonneværdierne som beskrevet tidligere:

Eller tilpas karakteristikaene for de pågældende ID-kolonneværdier, såsom Uniqueness, Min, Max og Increment af de genererede værdier, som nedenfor:

Derudover kan kolonnen Fornavn begrænses til at være mand eller kvinde eller en kombination af disse to typer. Du kan også kontrollere procentdelen af ​​NULL eller tomme værdier i den kolonne, som vist nedenfor:

Kolonnen Fødselsdato kan også styres ved at angive den kategori, som disse elever vil falde ind under, såsom Studerende, Teenagere, Voksne eller Pensionerede som vist nedenfor:

Du kan også angive den fuldt beskrevne generator, der kan bruges til at generere landekolonnens værdier som vist nedenfor:

Og tilpas ligningen, der vil blive brugt til at generere e-mail-adresse kolonneværdierne som følger:

Ud over kompleksiteten af ​​den tilpasselige ligning genererer vi adgangskodekolonnens værdier, som vist nedenfor:

Og endelig, for mit eksempel og ikke for dette magiske værktøj, de generatorer og ligninger, der bruges til at generere adressekolonnens værdier nedenfor:

Efter denne rundvisning kan du forestille dig, hvordan dette magiske værktøj vil hjælpe dig med at generere data og simulere realtidsscenarier for at teste din applikations funktionalitet. Installer det, og nyd at få fordele af alle tilgængelige funktioner og muligheder.

Nyttigt værktøj:

dbForge Data Generator til SQL Server – kraftfuldt GUI-værktøj til en hurtig generering af meningsfulde testdata til SQL Server-databaser.


  1. Sådan gemmer du et MySQL-forespørgselsresultat i en .CSV-fil

  2. FORMAT() Eksempler i MySQL

  3. Nulstil automatisk stigningstæller i postgres

  4. Annoncering af ClusterControl 1.7.4:Klynge-til-klynge-replikering - Ultimativ gendannelse af katastrofer