Generiere randome Namen in sql

Ich habe 5 randome Namen für Männer und Frauen. Ich muss randome Namen nach dem Geschlecht insert. Aber wie können wir Namen in randomer von einem Satz von 5 Namen in SQL insert. Ist es möglich?

select name from table order by newid() 

Erstellen Sie eine Tabelle mit den Namen und eine Integer-ID. Dann benutze RAND () mit% 5, um auf einen Wert zwischen 0 und 4 einzuschlafen. Füge 1 hinzu, wenn du einen Mann willst und 6 wenn du ein Weibchen willst. Wie so:

 Create table RandomNames (id int, name varchar(100), gender char(1) ) insert into RandomNames (id, name,gender) select 1,'Bill','M' union select 2,'John','M' union select 3,'Steve','M' union select 4,'Mike','M' union select 5,'Phil','M' union select 6,'Sarah','F' union select 7,'Ann','F' union select 8,'Marie','F' union select 9,'Liz','F' union select 10,'Stephanie','F' declare @wantedGender char(1) select @wantedGender = 'M' select name from RandomNames where id = (CAST(RAND()*100 as int) % 5) + case when @wantedGender = 'M' then 1 else 6 end 

memoryn Sie die 5 randomen Namen für männlich in einer Tabelle und die 5 randomen Namen für weiblich in einer anderen Tabelle. Wähle eine randome ganze Zahl zwischen 1 und 5 und Querverweis auf männliche oder weibliche Tabelle mit einem inneren Join.

Arbeiten an diesem Problem derzeit. Rand () nicht arbeiten, bekommst du die gleiche Zufallszahl für alle 300 Zeilen. NewID () gibt dir keinen Wert, der nutzbar ist. Sie können jedoch die folgende Formel für einen randomen Wert zwischen 1 und 5 auf jeder Zeile verwenden. NewID und Checksum, die Ihnen eine randome Nummer gegeben haben, aber das schließt auch negative Zahlen ein, dann teilen Sie sich mit 4 und nehmen den Rest (0-4), so dass Sie dann den absoluten Wert dieser Zahl nehmen und 1 dazu hinzufügen. Verwenden Sie dann diese Zufallszahl, um einen Wert aus den Tabellen der Namen auszuwählen.

 ABS(Checksum(NewID()) % 4) + 1 

Verwenden Sie es in einem Befehl:

 Create table randomnames (ID int identity, name) insert into randomnames (name) Values ('Tom', 'Dick', 'Harry', 'Jughead', 'Archie' ,'Sally','Sue','Peggy', 'Betty', 'Veronica') update sometablename set Name = case gender when 'M' then (select name from randomnames where ID = ABS(Checksum(NewID()) % 4)) + 1 when 'F' then (select name from randomnames where ID = ABS(Checksum(NewID()) % 4)) + 6 end 

Erstellen Sie eine function

 CREATE FUNCTION [dbo].[getRandomName](@gen varchar(10)) RETURNS @name varchar(50) AS BEGIN SELECT TOP 1 @name = name FROM table WHERE gender=@gen ORDER BY newid() END 

Dann passiere einfach auf die so genannte function

 select dbo.getRandomName('male') 

Oder aktualisiere viele Zeilen wie folgt:

 UPDATE myNewTable SET newName=dbo.getRandomName('male') WHERE gender='male' 

In SQL server ist der beste path, um "random" zu bekommen, um newid() . Sie können nach diesem sortieren, um eine sortierte list zu erhalten.

Wenn du fünf Namen für jedes Geschlecht hast, kannst du einen CTE benutzen, um sie zu speichern. Der deployment würde dann aussehen:

 with names as ( select 'M' as gender, 'Alexander' as name union all select 'M', 'Burt' union all select 'M', 'Christopher' union all select 'M', 'Daniel' union all select 'M', 'Eric' union all select 'F', 'Alexandra' union all select 'F', 'Bertha' union all select 'F', 'Christine' union all select 'F', 'Daniela' union all select 'F', 'Erica' ) insert into table(name) select top 1 name from names where gender = @MyGender order by newid(); 
 select top 1 name from RandomNames where gender = 'M' order by newid() 

Sample-Geige