Get the deleted value using while looping through the columns
I'm short on time so I wasn't able review your code, but I'm basing this answer off your question: How to get the deleted values/capturing changes?

Just yesterday I was reading from CH. 8 of Itzik Ben-Gan's "Microsoft SQL Server 2012 T-SQL Fundamentals" and he had a good section on creating audit tables with the use of the OUTPUT clause. To me this was eye opening and a really cool and simple way of tracking changes such as UPDATES or DELETES.

Assume we have an Orders table with 4 columns: orderid, custid, empid, and orderdate. If we wanted to create an audit table that tracks delete statements the code would be:

DELETE FROM dbo.Orders
OUTPUT
    deleted.orderid,
    deleted.orderdate,
    deleted.empid,
    deleted.custid
Into dbo.OrdersAudit
WHERE orderid = '5';


This code will run your delete statement, and store the all the values into your audit table. The OUTPUT clause can also be used to track your inserts and updates. From what I can tell, the downside is you have to incorporate the OUTPUT clause into all of your procedures. But I wasn't even aware of this clause, and it's super simple to learn the syntax. This probably wasn't what you were looking for, but I was really excited when I read about this clause, and looks like an easy way to track data changes for audits.