SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TR_TestTable_Modify] on [dbo].[TestTable]
   AFTER UPDATE
AS
BEGIN
  DECLARE @DBTableID int;
  DECLARE @Columnid int;
  DECLARE @ColumnCount int;
  DECLARE @i int;
  DECLARE @ColumnName varchar(20);
  DECLARE @SQL varchar(4000);
  DECLARE @LogTime datetime;
  DECLARE @program nvarchar(200)
  SELECT @DBTableID=id from sysobjects where name='TestTable'
  SELECT @ColumnCount=MAX(column_id) FROM sys.columns WHERE [object_id]=@DBTableID
  SELECT @program=program_name from sys.dm_exec_sessions where session_id=@@SPID
  select * into #inserted from inserted;
  select * into #deleted from deleted;
  SET @i = 0
  SET @LogTime=GETDATE()
  WHILE @i < @ColumnCount
  BEGIN
   SET @i = @i+1
   SELECT @ColumnName=name FROM sys.columns WHERE [object_id]=@DBTableID AND column_id=@i
   SET @SQL = 'INSERT INTO LogTable SELECT a.invno,''‘TestTable'',''' + @ColumnName + ''',a.' + @ColumnName + ',b.'+ @ColumnName + ',''' + convert(varchar(30), @LogTime,121) + ''',''' + @program + ''' FROM #deleted a,#inserted b WHERE a.PK=b.PK AND a.' + @ColumnName + ' <> b.' + @ColumnName
   EXEC (@SQL)
  END
  drop table #inserted;
  drop table #deleted;
END
GO
星期二, 6月 27, 2017
SQL Trigger 來紀錄哪些欄位被修改了
C# DateTime 相減
每次用到都要去 Google,這次決定把他記下來
當兩個 DateTime 要相加減時就需要用到 TimeSpan
當兩個 DateTime 要相加減時就需要用到 TimeSpan
DateTime begDate = DateTime.Now;
TimeSpan ts = DateTime.Now - begDate;
string diff = ts.Minutes.ToString() + "分" + ts.Second.ToString() + "秒";
星期一, 6月 05, 2017
Transaction Log 備份失敗 - 因為沒有目前的資料庫備份
昨天突然 Transaction Log 備份出現了錯誤:因為沒有目前的資料庫備份。 BACKUP LOG 正在異常結束。
只好求助 Google 了,才知道原來是當時的資料庫的復原模式重簡單改成完整之後都沒有進行過完整備份或差異備份,所以 Transaction Log 沒有一個紀錄點,才會有這個錯誤發生。
Reference: https://dotblogs.com.tw/terrychuang/2013/08/28/115722
只好求助 Google 了,才知道原來是當時的資料庫的復原模式重簡單改成完整之後都沒有進行過完整備份或差異備份,所以 Transaction Log 沒有一個紀錄點,才會有這個錯誤發生。
Reference: https://dotblogs.com.tw/terrychuang/2013/08/28/115722
訂閱:
意見 (Atom)