SQL Insert derived data i en kolumn

Permalänk

SQL Insert derived data i en kolumn

Hej, skulle behöva hjälp med hur man "insertar" derrived data i en kolumn.
Kolumner
loanperiod = månader ett item får lånas.
CheckoutDate = när ett item lånas.
lastreturndate = (checkoutdate + loanperiod)

select dateadd(month,loanperiod,CheckOutDate) as lastreturndate

Hur lägger jag sen in värdet från ovanstående i min kolumn lastreturndate kolumn?

Tack på förhand

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Funkar inte:

DECLARE @lastreturndate DATETIME

SET @lastreturndate = dateadd(month,loanperiod,CheckOutDate)

Och sedan en vanlig insert into med @lastreturndate som ett value?

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk

Ser det här rätt ut?

DECLARE @lastreturndate DATETIME

SET @lastreturndate = dateadd(month,loanperiod,CheckOutDate)

INSERT INTO Loan(lastReturnDate)VALUES (@lastreturndate)

FROM Loan

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Det kallas att man dubbellagrar när du sparar lastreturndate i databasen.

Du har redan när den lånades och hur många dagar den skall vara utlånad. Du behöver då inte på något vis spara lastreturndate i databasen, för den datan finns ju faktiskt redan!

Du kan ju när som helst plocka fram lastreturndate genom att plocka alla month och checkoutdate och sen bara add month till checkoutdate så får du ju lastreturndate.

Alternativt kan du skippa loanperiod och bara ha checkout och lastreturndate - från det kan du ju få fram hur många sekunder boken är utlånad, o.s.v.

Jag vet att det inte är svar på din fråga, men det är ett bra tips på riktigt, och itne bara nåt hokuspokus du borde skriva storabokstävertjafs.

Permalänk
Medlem

Om lastreturndate är en derived/ Computed column så behöver du inte ange kolumnen alls vid insert. Värdet kommer inte sparas fysiskt, i detta exempel, utan kommer att beräknas när du hämtar raden med SELECT.

create table Loans( loanperiod int, CheckoutDate datetime, lastreturndate as dateadd(month,loanperiod,CheckOutDate) ); insert Loans(loanperiod, CheckoutDate) values (1, getdate()); select * from Loans;

resultat:
1 2013-02-24 16:17:18.447 2013-03-24 16:17:18.447

Skrivet av Rickybobby:

Hej, skulle behöva hjälp med hur man "insertar" derrived data i en kolumn.
Kolumner
loanperiod = månader ett item får lånas.
CheckoutDate = när ett item lånas.
lastreturndate = (checkoutdate + loanperiod)

select dateadd(month,loanperiod,CheckOutDate) as lastreturndate

Hur lägger jag sen in värdet från ovanstående i min kolumn lastreturndate kolumn?

Tack på förhand