webForumDet fria alternativet

Unikt nummer i MS SQL Server

Databaser & SQLur Databashanterare & SQL

6 svar · 661 visningar · startad av firstchoice

Medlem sedan okt. 2001615 inlägg
Frågan#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...

Medlem sedan jan. 2005327 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.....	

)

Medlem sedan juli 200012 978 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.

Medlem sedan jan. 2005327 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

Medlem sedan feb. 20013 023 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.

Medlem sedan jan. 2005327 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

Medlem sedan juli 200012 978 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.

259 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
133 ms — hämta forumlista (db)
124 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)