You could create all of your objects with SCHEMABINDING, which would prevent you from changing any underlying tables without dropping and recreating the views and procedures built on top of them.Depending on your development process, this could be pretty cumbersome.
A user-defined function is a Transact-SQL or common language runtime (CLR) routine that accepts parameters, performs an action, such as a complex calculation, and returns the result of that action as a value.
The return value can either be a scalar (single) value or a table. The value of each declared parameter must be supplied by the user when the function is executed, unless a default for the parameter is defined.
For CLR functions, all data types, including CLR user-defined types, are allowed except text, ntext, image, user-defined table types and timestamp data types.
The nonscalar types, cursor and table, cannot be specified as a parameter data type in either Transact-SQL or CLR functions.
In multistatement table-valued functions, @Warning Joining to a multistatement table valued function in a FROM clause is possible, but can give poor performance.