Hej! Hej! Jag skulle spontant säga: Jag håller inte med om att man generellt kan säga hur en identifieringsfunktionalitet ska fungera i en databas, det beror väl på vilka krav som finns för just detta fall. Även om man ska ta bort saker eller ej beror ju på ett flertal faktorer. Att alltid låta rader ligga kvar för statistik påverkar ju trots allt prestandan negativt. Jag använder gärna en SP så det vore snällt om du la ut en sådan procedur. Tusen tack Christoffer! Fy på dig. Du sa det förbjudna ordet 'aldrig'. :) Här är Store Proceduren jag låvade....Hämta lediga nummer i SQL
Jag skulle vilja ha förslag på bra sätt att hitta lediga nummer i följande problem:
Anta att du har ett intervall mellan 1-100 som du vill använda som idnummer i SQLServer. I databasen ligger nu följande idnummer lagrade. 3,10,32,56,76,77,89
När du ska skapa en ny post i databasen vill du att programmet ska ta fram ett ledigt nummer i intervallet åt dig. Går detta att lösa med en sql-fråga eller måste jag hämta recordsetet och därefter lopa igenom det?Sv: Hämta lediga nummer i SQL
Jag och en jobbar-kompis har gjort en store-procidure
som fixar det... vi har nämligen vetal göra samma sak..
jag messar den här i morgon från jobbet
(om du vill använda sp)
Mvh
JohanSv: Hämta lediga nummer i SQL
- Id nyckeln bör inte vara beroende något man själv skriver, det bör skötas av ett fält med inställningen (räknare).
Varför?
Jo, för om du tar bort poster och byter id på dom så kommer du i dina andra relaterade tabeller få problem. Låt istället programmet sköta id-t åt dig så kan du alltid vara säker på att hitta din historik.
Gör istället så att om en post raderas, så sätt en flagga i ett fält som markerar att den är raderad. Då finns den kvar för statistik, men visas inte i andra sammanhang.
Hälsningar
/PelleSv: Hämta lediga nummer i SQL
Följande SQL sats ger det lägsta lediga numret mellan 1 och 100 i tabellen foo, kolumnen bar. Du måste dock fundera över vad som händer när det inte finns fler lediga värden inom intervallet.
select min(bar) - 1 from foo ext
where not exists (select 1 from foo where bar = ext.bar - 1)
and bar between 2 and 100Sv: Hämta lediga nummer i SQL
Håller med om att det är ett dumt sätt att jobba på men vad göra när någon annan har byggt det på detta vis.Sv: Hämta lediga nummer i SQL
Det kommer inte att bli något problem med intervallet då det klarar av 99999 poster vilket aldrig kommer att ske.Sv: Hämta lediga nummer i SQL
Nej, men allvarligt talat, se till att du inte 'bygger in dig i ett hörn' så att säga.Sv: Hämta lediga nummer i SQL
'*********************
CREATE PROCEDURE [SP_NAME] AS
declare @MaxInt int
declare @Cou int
declare @Counter int
Set @Cou = 1
Set @MaxInt = (select Max(Cast(SupplierNo as Int)) from Supplier)
WHILE (@Cou) < @MaxInt
BEGIN
Set @Counter = (SELECT Count(*) From Supplier where SupplierNo = @Cou)
IF @Counter = 0
BREAK
ELSE
BEGIN
Set @Cou = @Cou + 1
CONTINUE
END
END
If @Cou < @MaxInt
Set @Cou = @Cou
ELSE
Set @Cou = @MaxInt + 1
Insert Into Supplier (SupplierNo) Values (@Cou)
Select @Cou
'*********************
Denna genererar ingen nyckel... vara en column där man vill ha
en person/företags nummer typ... tabellen jag givetvis en räknare
också som är ID.....
Mvh
Johan