webForumDet fria alternativet

Unikt nummer i MS SQL Server

6 svar · 661 visningar · startad av firstchoice

firstchoiceMedlem sedan okt. 2001605 inlägg
#1

skall ha en tabell med ett ID nummer (integer) som jag vill att databasen skall generera automatiskt.

vilken datatyp skall jag använda, samt inställningar?

har hittat "timestamp" och "uniqueidentifier", men jag vill ha unikt nummer från typ 1 och framåt...

pebiMedlem sedan jan. 2005328 inlägg
#2

IDENTITY heter det jag tror du vill åt.
Då räknas i mitt exempel nedan counterfiled upp med ett vid varje insert.
(och man kan få tillbaka @@indentity om man vid sin insert vill veta vilket värde det blev)

/pebi

CREATE TABLE [dbo].[tabellen]
(
[counterfield] [int] IDENTITY(1,1) NOT NULL,

fler fält.....	

)

LaspMedlem sedan juli 200010 197 inlägg
#3

Du bör kanske starta med fem siffror eller sex beroende på mängden data
Så kan du väl sedan göra increment med 1 på fältet.

pebiMedlem sedan jan. 2005328 inlägg
#4

Lasp skrev:

Du bör kanske starta med fem siffror eller sex beroende på mängden data
Så kan du väl sedan göra increment med 1 på fältet.

Nja, det beror väl på vad du menar. Att själv hålla på och mixtra med increment är väl inte så bra. Det finns ju ingen garanti i sql-server vem som "hiiner först" om flera anrop görs samtidigt.
Om man använder identity så är det såvitt jag vet säkert för multipla samtidiga anrop, alla blir unika och varje anropare kan hämta sitt unika nummer i @@ variablen. 8och funkar det inte så är det microsofts fel ;), det SKA funka så)

/pebi

clarkbonesMedlem sedan feb. 20012 693 inlägg
#5

pebi, du missförstår LASP. LASP menar nog att man ska sätta seed (startvärdet) till tex 10000. Sedan låter man sql server sköta uppräkningen som du beskrev.

pebiMedlem sedan jan. 2005328 inlägg
#6

ja troligen gjorde jag väl det.
Man kan ju sätta vilket startvärde och vilket step som helst.
Men om numret inte skall användas publikt som typ kundnummer finns det ju ingen mening.
Det är ju ett numeriskt fält, INT är ju lika många bitar oavset värde.
Så teroretiskt "klipper man bort möjliga värden" NU kanske man inte fyller en INT iallafall.
Och skall numret användas som kundnummer, medlemsnummer eller så kan det ju vara en fördel att göra så, det kan ju tyckas lite B med kundnummer 3...
Då kan man ju t.om. använda step 7 eller något, så verkar det som om fler tillkommer om två som känner varandra reggar nästan samtidigt....

/pebi

LaspMedlem sedan juli 200010 197 inlägg
#7

Tack clarkbones för tillrättaläggandet.
Visst var det så jag menade. Att ha samma storhet (storlek) på numren, även om de inte är publika underlättar alltid i ett senare skede om man skall hantera data manuellt.
Det ser dessutom snyggare ut i interna rapporter och dylikt.

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