webForumDet fria alternativet

slump-tal som pk (ms-sql)

1 svar · 265 visningar · startad av bohlin

bohlinMedlem sedan mars 2000264 inlägg
#1

Jag vill att ett int-fält som är pk ska slumpas fram istället för kommer i ordning. hur skapar man en sån tabell?

create table nisse(int id primary key SLUMPTAL-någon, int fält2, o.s.v)

------------------
/bohlin
kaffe är djävulens dryck
glögg är guds dryck

LarsGMedlem sedan dec. 200012 465 inlägg
#2

I och med att primärnyckelskolumner skall vara unika så är det lite svårt, speciellt om mam har samtidiga användare, att skapa slumpmässiga unika värden. Det finns i alla fall inget direkt stöd i databasen.
Det som finns är att man kan ange att en kolumn har ett defaultvärde, och det defaultvärdet kan vara ett funktionsanrop. Det kan vara ett anrop till en funktion som du skriver själv och som innehåller något anrop till rand-funktionen med någon lämplig seed, tex

create function my_random_func()
returns int as
begin
  declare @cnt int
  select @cnt = 
/* något bra seed
kanske antal millisekunder sedan någon tidpunkt */
  return (cast(10000*(rand(@cnt)) as integer))
end

sen kan man lägga till defaultvärdet vid create table

  create table ogrish(nonpk int default my_random_funk, ...

som sagt skulle jag inte lägga den som primärnyckel då det blir mer jobb att hitta på unika värden. Det är ju inget problem att göra order by på den kolumnen.

Alternativt kan man ha primärnyckel som räknare och randomisera vid utsökningen istället:

  select * from ogrish order by rand(id)

------------------
essentitia preter non sans multiplicandum

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb