| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |