Interesting, but please all do not forget that this is what PERMISSIONS are for in SQL Server. I find it's best to use a thing according to its intended purpose first, and only tweak/hack it when absolutely necessary. This trick is not as secure, it's harder to understand, it would potentially make life miserable for someone working on the system who is unfamiliar with it, etc. etc.
If you want a table to be read only, then:
1. Set permissions for the user(s) or role(s) as Select for the table
2. Set permissions to grant execute on the stored proc.
This works perfectly.