Jag vill göra följande i en SQL-server 2000: Jag skulle normalisera tabellen så att den ser ut så här: Ja jag har funderat åt det hållet så det får bli så istället, Om antalet properties är flytande så är mitt förslag helt överlägset ditt första eftersom man kan ha 1 -> X antal properties för varje individuell symbol. Om du vill behålla din struktur kan du lösa det med en SP:Strukturfråga, trigger eller proc ? (LÖST)
En tabell innehåller information om aktier:
Symbol, Prop1, Prop2, Prop3, Prop4, Prop5, TimeStamp
Vid varje förändring för aktiekursen skapas en ny rad med aktienamnet (symbol) och ett värde på någon av Prop kolumnerna. Det jag vill ska hända är att den nya raden, skall uppdateras med all information om aktien från föregånde rad.
en illustration:
Befintlig rad:
ERIC-B, 8.90, 8,95, 290545, 13050, 123440, 0x000001A5
Ny uppdatering sker
ERIC-B, 8.95, NULL, NULL, NULL, NULL, 0x000001A3
Önskvärt slutläge
ERIC-B, 8.95, 8,95, 290545, 1300, 123440, 0x000001A3
Hur görs detta bäst (prestandamässigt) ?
Trigger på varje INSERT ? eller någon annat smart sätt ?Sv: Strukturfråga, trigger eller proc ?
Symbol, propID, propVärde, timestamp
Då kan du mycket lättare uppdatera den prop som ska uppdateras. Om det _ALLTID_ ska vara 5 prop-värden kan du generera de 5 raderna när en ny symbol läggs upp annars behöver du bara lägga till dem varefter de behövs.
Om du normaliserat tabellen blir programkoden snyggare/lättare om du kapslar in uppdateringen av tabellen i en SP.
/johan/Sv: Strukturfråga, trigger eller proc ?
tyvärr kommer det inte alltid att vara 5 "properties" men det går ju att hantera ändå.
tack för förslaget, någon som tycker annorlunda ?Sv: Strukturfråga, trigger eller proc ?
/johan/Sv: Strukturfråga, trigger eller proc ?
CREATE PROCEDURE spInsertEntry
(
@Symbol varchar(20),
@Prop1 double,
@Prop2 double,
@Prop3 double,
@Prop4 double,
@Prop5 double,
@TimeStamp
)
DECLARE @LastProp1
DECLARE @LastProp2
DECLARE @LastProp3
DECLARE @LastProp4
DECLARE @LastProp5
SELECT TOP 1 @LastProp1 = Prop1, @LastProp2 = Prop2, @LastProp3 = Prop3, @LastProp4 = Prop4, @LastProp5 = Prop5
FROM TabellNamn
WHERE Symbol = @pSymbol
ORDER BY TimeStamp DESC
DECLARE @NewProp1
DECLARE @NewProp2
DECLARE @NewProp3
DECLARE @NewProp4
DECLARE @NewProp5
IF @Prop1 IS NULL
SET @NewProp1 = @LastProp1
ELSE
SET @NewProp1 = @Prop1
IF @Prop2 IS NULL
SET @NewProp2 = @LastProp2
ELSE
SET @NewProp2 = @Prop2
IF @Prop3 IS NULL
SET @NewProp3 = @LastProp3
ELSE
SET @NewProp3 = @Prop3
IF @Prop4 IS NULL
SET @NewProp4 = @LastProp4
ELSE
SET @NewProp4 = @Prop4
IF @Prop5 IS NULL
SET @NewProp5 = @LastProp5
ELSE
SET @NewProp5 = @Prop5
INSERT INTO TabellNamn (Symbol, Prop1, Prop2, Prop3, Prop4, Prop5)
VALUES (@Symbol, @NewProp1, @NewProp2, @NewProp3, @NewProp4, @NewProp5)
GO