|
| tsql, COLUMN_REALLY_CHANGED() Fra : Leif Neland |
Dato : 05-01-09 22:43 |
|
[Jeg har fejlpostet denne i ASP-gruppen, jeg prøver at cancel´e den der..]
Jeg vil gerne have logget ændringer til nogle af felterne i en tabel.
Findes der i tsql en funktion, der viser når en kolonne er blevet
/ændret/ i stedet for blot /opdateret/ til samme værdi den havde i
forvejen, eller er man nødt til at lave
CREATE TRIGGER [t_lok_trigger] ON [dbo].[t_lok]
FOR INSERT, UPDATE
AS
insert into dbo.t_lok_audit
(id,Lagerkode,lagerantal,minlager,changed)
select i.id,i.Lagerkode,i.lagerantal,i.minlager,GETDATE()
from inserted i left join deleted d on i.id=d.id
where i.Lagerkode<>d.Lagerkode
or i.lagerantal<>d.lagerantal
or i.minlager<>d.minlager
Min sql fra asp laver en UPDATE t_lok SET Lagerkode=?, lagerantal=?,
minlager=? WHERE id=? uden at tænke over hvad de hidtidige værdier var,
og jeg vil kun have logget ændringer.
Det er vel forøvrigt ikke muligt at logge den sql-sætning, der faktisk
laver ændringen?
Leif
| |
Stig Johansen (06-01-2009)
| Kommentar Fra : Stig Johansen |
Dato : 06-01-09 05:42 |
|
Leif Neland wrote:
> Det er vel forøvrigt ikke muligt at logge den sql-sætning, der faktisk
> laver ændringen?
Det er muligt at logge en sql sætning, men måske ikke brugbar i dit
tilfælde.
Vi brugte det inden for staten, hvor der under de gamle registerforskrifter
var krav om logning af hvem, hvornår og hvad der blev spurgt om i forhold
til personfølsomme data.
Det blev lavet ved at 'montere' et trace, som tracede ned i en tabel i
databasen.
Det er de samme data, som du kan trace via profileren.
Jeg beklager jeg ikke kan være mere specifik, men det er så lang tid siden,
at jeg ikke husker detaljerne, og det var i øvrigt også 7.0.
Men muligheden er der.
Prøv at kigge under sp_trace_* funktionerne.
--
Med venlig hilsen
Stig Johansen
| |
|
|