One of the things I always do when creating dynamic sql is to 'print' it first to see what it is producing: great way to mitigate any errors. Anyway, along those lines try something like:
declare @Id int, @LastUpdated datetime, @Volume decimal
set @Id = 1
set @LastUpdated = getdate()
set @Volume = 10
declare @Sql nvarchar(max), @tableName nvarchar(100)
set @TableName = 'dummy'
set @Sql =
'insert into [dbo].' + @tableName + ' (Id, LastUpdated, Volume)
values(' + convert(nvarchar, @Id) + ',''' + convert(nvarchar, @LastUpdated) + ''',' + convert(nvarchar, @Volume) + ')'
print @Sql
uncomment the exec when you are ready and, obviously, only use the part pertinent to your requirement.