HDSoftware Skrevet 3. juli 2015 Del Skrevet 3. juli 2015 Folkens.. Vi trenger en metode for å hente neste nummer i en serie. Vi har nummerserier plassert i en tabell: ID Integer SerieNavn varchar(50) StartNr Integer SluttNr Integer LastNr Integer I dag så gjør vi dette på klient siden, men det er ikke godt nok når det er mange brukere. Går det ikke an å lage en StoredProc som fikser dette? Som garantert funker i flerbruk miljøer Lenke til kommentar
HDSoftware Skrevet 22. juli 2015 Forfatter Del Skrevet 22. juli 2015 (endret) Jaja, ingen som visste dette skjønner jeg., Fant ut av det sjæl i stedet. Deler dette med dere i tilfelle noen andre har behovet: Brukte en eksisterende tabell for formålet som ser slik ut: CREATE TABLE [dbo].[SYSCOUNT] ( [ID] INT NOT NULL, ' Record ID [CTYPE] TINYINT NOT NULL, ' Nummerserie type [CCN_ID] INT NOT NULL, ' Sub type [ANS_ID] INT NOT NULL, ' Ansatt ID [IDCOUNT] DECIMAL (11) NULL, ' Siste brukte ID i serien PRIMARY KEY CLUSTERED ([ID] ASC), UNIQUE NONCLUSTERED ([CCN_ID] ASC, [CTYPE] ASC, [ANS_ID] ASC) ); Så lagde jeg en SP som sørget for eksistensen av record: CREATE procedure CreateNewNumberSequence @SequenceType tinyint, @user int, @SubCode int = 0, @startID decimal = 1 as begin declare @nextID int if exists (select 1 from SYSCOUNT where CTYPE = @SequenceType and CCN_ID = @SubCode and ANS_ID = @user) begin return 1 end select @nextID = MAX(ID) from SYSCOUNT if @nextID is null set @nextID = 1 else set @nextID = @nextID + 1 insert into SYSCOUNT (ID, CTYPE, CCN_ID, ANS_ID, IDCOUNT) values(@nextID, @SequenceType, @SubCode, @user, @startID - 1) end Og så til slutt en SP som skal brukes fra programmene for selve spørringen: CREATE procedure GetNewSequentialID @SequenceType tinyint, @SubCode int, @user int as begin declare @NewSequentialId decimal declare @currentval decimal set NOCOUNT ON select @currentval = IDCOUNT from SYSCOUNT where CTYPE = @SequenceType and CCN_ID = @SubCode and ANS_ID = @user if @currentval is null begin execute CreateNewNumberSequence @SequenceType,@user, @SubCode, 1 select @currentval = IDCOUNT from SYSCOUNT where CTYPE = @SequenceType and CCN_ID = @SubCode and ANS_ID = @user end update SYSCOUNT set @NewSequentialId = IDCOUNT = @currentval + 1 where CTYPE = @SequenceType and CCN_ID = @SubCode and ANS_ID = @user return @NewSequentialId end Synes dette var greit finni på av en som aldri har laget SP'er før jeg. Endret 29. juli 2015 av HDSoftware 1 Lenke til kommentar
8086 Skrevet 28. juli 2015 Del Skrevet 28. juli 2015 (endret) Jaja, ingen som visste dette skjønner jeg., Fant ut av det sjæl i stedet. Deler dette med dere i tilfelle noen andre har behovet: Brukte en eksisterende tabell for formålet som ser slik ut: CREATE TABLE [dbo].[SYSCOUNT] ( [ID] INT NOT NULL, [CTYPE] TINYINT NOT NULL, [CCN_ID] INT NOT NULL, [ANS_ID] INT NOT NULL, [IDCOUNT] DECIMAL (11) NULL, PRIMARY KEY CLUSTERED ([ID] ASC), UNIQUE NONCLUSTERED ([CCN_ID] ASC, [CTYPE] ASC, [ANS_ID] ASC) ); ... (klippet bort) Synes dette var greit finni på av en som aldri har laget SP'er før jeg. Akkurat sånne spørsmål synes jeg gir høyest verdi for allmenheten å legge på SO. Og hvis man legger ut ferdig kode kunne det være en ide å kommentere variablene litt for å gjøre det klart hva i all verden de gjør for noe. Synes det ikke er opplagt hva IDCOUNT, CTYPE, CCN_ID, ANS_ID og IDCOUNT var ment å gjøre, og dermed har koden mye mindre verdi, selv om du skal ha takk for å ha postet den :-) Endret 28. juli 2015 av 8086 Lenke til kommentar
HDSoftware Skrevet 29. juli 2015 Forfatter Del Skrevet 29. juli 2015 Jaja, ingen som visste dette skjønner jeg., Fant ut av det sjæl i stedet. Deler dette med dere i tilfelle noen andre har behovet: Brukte en eksisterende tabell for formålet som ser slik ut: CREATE TABLE [dbo].[SYSCOUNT] ( [ID] INT NOT NULL, [CTYPE] TINYINT NOT NULL, [CCN_ID] INT NOT NULL, [ANS_ID] INT NOT NULL, [IDCOUNT] DECIMAL (11) NULL, PRIMARY KEY CLUSTERED ([ID] ASC), UNIQUE NONCLUSTERED ([CCN_ID] ASC, [CTYPE] ASC, [ANS_ID] ASC) ); ... (klippet bort) Synes dette var greit finni på av en som aldri har laget SP'er før jeg. Akkurat sånne spørsmål synes jeg gir høyest verdi for allmenheten å legge på SO. Og hvis man legger ut ferdig kode kunne det være en ide å kommentere variablene litt for å gjøre det klart hva i all verden de gjør for noe. Synes det ikke er opplagt hva IDCOUNT, CTYPE, CCN_ID, ANS_ID og IDCOUNT var ment å gjøre, og dermed har koden mye mindre verdi, selv om du skal ha takk for å ha postet den :-) Kommentarer er lagt på.. Når det gjelder bruken av SO så er jeg uenig. Da kan man jo strengt tatt legge ned hele diskusjon.no da. Er ikke poenget at man skal få et blomstrende miljø i Norge da? Hvis alle legger ting ut på SO, eller MSDN for den saken skyld, så er jo dette forumet bortkastet. Synes det er litt leit at folk har den holdningen jeg. Når jeg startet med .NET programmering så var nettopp denne kanalen selve utdannelses sentralen for meg. Heg kunne jeg spørre og grave om alt mulig og svar kom i løpet av kort tid. Lenke til kommentar
8086 Skrevet 29. juli 2015 Del Skrevet 29. juli 2015 Når det gjelder bruken av SO så er jeg uenig. Da kan man jo strengt tatt legge ned hele diskusjon.no da. Er ikke poenget at man skal få et blomstrende miljø i Norge da? Hvis alle legger ting ut på SO, eller MSDN for den saken skyld, så er jo dette forumet bortkastet. Synes det er litt leit at folk har den holdningen jeg. Når jeg startet med .NET programmering så var nettopp denne kanalen selve utdannelses sentralen for meg. Heg kunne jeg spørre og grave om alt mulig og svar kom i løpet av kort tid. Domenenavnet sier alt. DISKUSJON.no. Disse foraene egner seg jo aller best til å diskutere en sak fram og tilbake, men grunnen til at SO har nådd toppen er jo at disse foraene har veldig lav S/N (signal/noise) for klare spørsmål (eller problemer). SO er helt klart stedet å gå for spørsmål, men passer overhodet ikke for diskusjoner. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå