Auditing a complex mix of reasonably small tables
Looks Like a nice, straight forward solution.

The only suggestion that I have , and while this is an unlikely situation, if the database were hosted on a failover cluster and the user were to connect to the instance locally (i.e. from anyone of the servers in the cluster), you wouldn't know which computer they logged in from. The value of @useraddress would be set as '&lt;local machine&gt;'.

This would also be the case when a user connects locally to the SQL Server instance, but if there's only one instance (i.e. not in a cluster), then it's not really a big deal, since you know which computer that is.

Although, to play it safe, why not modify the code to set the value for @useraddess like this, which will give you the computer name instead of '&lt;local machine&gt;':

DECLARE @useraddress nvarchar(128); --&lt;== Originally set as varchar(48)

SELECT @useraddress = REPLACE(client_net_address
                     ,'&lt;local machine&gt;'
                     ,CAST(SERVERPROPERTY('MachineName') AS nvarchar(128)))
  FROM sys.dm_exec_connections
 WHERE session_id = @@SPID;


See:


SERVERPROPERTY (Transact-SQL)