[SQL] Command Insert Log 寫整列

有些時候我們的Log Table 會和原本的Table長得很相似(可能多幾個欄位而已)

 

小弟我程式還很菜,一直想說寫Log 就是要再重新Insert 一次 然後把值丟進去

但今天才突然學到有可以用Insert 中 先Select 的方法

            string sqlCommand = @"                             
                                INSERT INTO TableALog
                                SELECT TOP 1
                                LogDate = @ModifyDate, 
                                LogUserID = @ModifyUserId,
                                LogAction = 'D',
                                * 
                                FROM TableA
                                WHERE ID= @ID  
                                ";

這樣就簡簡單單了阿

--------------------------------

額外補充,一次的連線要有2次以上的CRUD

一律都要用 TranscationScope 包住

可把 Log 這個Insert 裝成方法

在原本Delete的Dal Function 中 先用Transaction 包住原本Delete的Command

並在之前if 判斷 寫入Log 如果出錯 就return 也跑不到scope.Compelete

            using (TransactionScope scope = new TransactionScope())
            {
                if (!InserAttachmentLog(Id))
                {

                    scope.Dispose();
                    LogSet.LogError($"Invoke InserAttachmentLog() error. " );
                                    
                    return false;
                }
                #region 填入 sql command            
                string sqlCommand = @"
                                DELETE FROM TableA
                                WHERE ID= @ID
                                ";
                #endregion 填入 sql command  

                #region 
                object param = new
                {
                    ID= ID
                };
                #endregion

                scope.Complete();
                return ExecuteCommand(sqlCommand, param);            
            }