Ik was net ff met SQL Server aan het spelen, en ik had volgende table aangemaakt:
tblUser
(
UserId INT autoinc,
UserName VARCHAR,
UserPwd VARCHAR,
UserEmail VARCHAR,
DateChanged TIMESTAMP
)
De bedoeling van de 'DateChanged' columns is dus, dat ik weet wanneer een record aangemaakt/geupdated werd, dit voor concurrency redenen.
Nu, heb ik een record als volgt geinserted:
Ik ging erdus van uit dat het veld DateChanged op de systemdatetime ging staan van de server waarop het record gecreeërd werd.
Niets is echter minder waar. Als ik een select * deed, dan kreeg ik het volgende te zien:
1900-01-01 00:00:04.037
Dit is dus allesbehalve de systemdatetime.
gorgi_19 wees me toen op deze link, waarin afgeraden wordt om timestamp columns te gaan gebruiken. Echter, in die pagina staat wel een quote uit de BoL:
Heeft iemand een idee hoe het komt dat die timestamp waardes in hex-formaat getoond worden, en dat het niet de system-datetime is die gebruikt wordt?
Hoe houden jullie bij wanneer een record gemaakt/gewijzigd werd? Doen jullie het met een timestamp, of eerder met een datetime column die jullie dan zelf (in de stored procedure ofzo) gaan gaan updaten?
tblUser
(
UserId INT autoinc,
UserName VARCHAR,
UserPwd VARCHAR,
UserEmail VARCHAR,
DateChanged TIMESTAMP
)
De bedoeling van de 'DateChanged' columns is dus, dat ik weet wanneer een record aangemaakt/geupdated werd, dit voor concurrency redenen.
Nu, heb ik een record als volgt geinserted:
code:
1
2
3
4
| INSERT INTO tblUser
(UserName, UserPwd, UserEmail)
VALUES
('blaat', 'pass', 'blaat') |
Ik ging erdus van uit dat het veld DateChanged op de systemdatetime ging staan van de server waarop het record gecreeërd werd.
Niets is echter minder waar. Als ik een select * deed, dan kreeg ik het volgende te zien:
Ik vond het dus al vreemd dat ik die timestamp in een hex-formaat kreeg. Als ik die hex-waarde convert naar een datetime waarde, dan krijg ik volgende waarde:1 blaat pass blaat 0x00000000000004BB
1900-01-01 00:00:04.037
Dit is dus allesbehalve de systemdatetime.
gorgi_19 wees me toen op deze link, waarin afgeraden wordt om timestamp columns te gaan gebruiken. Echter, in die pagina staat wel een quote uit de BoL:
Dus, eigenlijk is -als ik het goed interpreteer- die timestamp wel degelijk geschikt voor mijn situatie.The SQL Server timestamp data type has nothing to do with times or dates. SQL Server timestamps are binary numbers that indicate the relative sequence in which data modifications took place in a database
Heeft iemand een idee hoe het komt dat die timestamp waardes in hex-formaat getoond worden, en dat het niet de system-datetime is die gebruikt wordt?
Hoe houden jullie bij wanneer een record gemaakt/gewijzigd werd? Doen jullie het met een timestamp, of eerder met een datetime column die jullie dan zelf (in de stored procedure ofzo) gaan gaan updaten?
https://fgheysels.github.io/