Avatar billede karl-koder Nybegynder
06. januar 2008 - 18:35 Der er 14 kommentarer og
1 løsning

Hjælp til stored procedure

Hejsa,

Jeg har en tabel der indeholder et feltet SortOrder af typen Int som har til formål at sortere records i rækkefølge.

Når jeg så opretter en ny record skal jeg have lavet en procedure der kan hente værdien fra feltet SortOrder fra den sidst tilføjede record og ligge en til som så kan bruges som variabel når den nye record bliver tilføjet, jeg prøver at skitsere :

Select SortOrder From myTable Order by Id Desc

Skal have den med som variabel

Insert Into myTable (Navn, Adresse, SortOrder) Values (@Navn, @Adresse, @SortOrder)

Er der ikke en af jer der kan vise mig hvordan jeg laver det som en procedure, da jeg er lidt grøn i procedures ;o)
Avatar billede arne_v Ekspert
06. januar 2008 - 18:45 #1
Inden vi går igang med;

SELECT MAX(sortorder)+1 FROM mytable

så skal jeg lige høre om du har overvejet flere samtidige brugere ?
Avatar billede terry Ekspert
06. januar 2008 - 19:12 #2
Why dont you just use an IDENTITY (autonumber) column?
Avatar billede terry Ekspert
06. januar 2008 - 19:14 #3
CREATE TABLE myTable
        (ID INT IDENTITY(1,1) NOT NULL,
          Navn VARCHAR(50) NOT NULL,
          Adress VARCHAR(50) NOT NULL)
Avatar billede karl-koder Nybegynder
06. januar 2008 - 19:32 #4
arne_v >>

Både ja og nej et af mine næste spørgsmål ville nemlig være hvorledes jeg låser en record så længe den er brug. Men kom endelig med nogle ideer.

terry >>

Det er fordi SortOrder bliver redigeret hele tiden afhænnigt af hvordan brugeren vil have tabellen sorteret.
Avatar billede karl-koder Nybegynder
06. januar 2008 - 19:38 #5
terry >>

Der vil for øvrigt også blive slettet i tabellen hvor numrene vil blive løbet igennem og ændret fra den slettede record og ned.
Avatar billede terry Ekspert
06. januar 2008 - 19:43 #6
Then I'd use Arnes method and keep my fingers crossed at the same time.
Avatar billede terry Ekspert
06. januar 2008 - 19:44 #7
If you have a routine to resort (after delete) you could also use this to take into account duplicates
Avatar billede arne_v Ekspert
06. januar 2008 - 22:31 #8
1)  at forsøge at holde en kolonne "uden huller" er generelt ikke en god ide

2)  samtidigheds problemet burde kunne løses med et passende højt transaction
    isolation level (serializable)

3)  din insert må kunne laves som:

DECLARE @x AS INTEGER;
SELECT @x = MAX(sortorder)+1 FROM mytable;
INSERT INTO mytable (navn, adresse, sortOrder) VALUES (@navn, @adresse, @x)

og det kan nemt pakkes ind i en SP
Avatar billede karl-koder Nybegynder
06. januar 2008 - 23:00 #9
1) Nej Det har du ret i, ideen er også bare at bytte om på 2 tal i 2 records så det burde ikke blive noget problem.

2) Kan du forklare det lidt nærmere ?

3) Skal jeg forstå det således at jeg bare kan gøre følgende :

Create Procedure [AddToTable]
    @Navn
    @Adresse
    @SortOrder
As
    Select @SortOrder = Max(SortOrder)+1 From myTable
    Insert Into myTable (Navn, Adresse, SortOrder) Values (@Navn, @Adresse, @SortOrder)
Avatar billede arne_v Ekspert
06. januar 2008 - 23:24 #10
re 3)

@SortOrder er ikke et argument til SP men en variabel som du DECLARE'r
Avatar billede arne_v Ekspert
06. januar 2008 - 23:26 #11
re 2)

Der skal du nok læse lidt.

Der er masser af artikler på nettet. Bl.a.:

http://bartdesmet.net/blogs/bart/archive/2005/07/25/3077.aspx
Avatar billede karl-koder Nybegynder
07. januar 2008 - 17:41 #12
arne_v >> Super, tak for hjælpen. Jeg fandt også en artikel der beskriver brugen af stored procedure's så det kan ikke være bedre.

Dog vælger jeg nok at ligge en "lås" på en record i min .Net kode da jeg skal låse den i redigerings øjemed.
Avatar billede arne_v Ekspert
07. januar 2008 - 18:01 #13
http://www.eksperten.dk/artikler/996 giver en oversigt over forskellige samtidigheds problemer
og loesninger
Avatar billede arne_v Ekspert
07. januar 2008 - 18:06 #14
og et svar fra mig
Avatar billede karl-koder Nybegynder
08. januar 2008 - 14:24 #15
Super så var der lidt mere læsestof ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester