Using CREATE TYPE within Stored Procedure Call
Ownership chaining from procedure does not work with DDL statements and TRUNCATE statement. You can use execute with impersonation (execute as) in your case.

The impersonation example for creating a stored procedure is -

Create procedure &lt;your procedure&gt;
with execute as owner
 as
   create type ...


Alternately, you can sign your procedure with certificates created with appropriate permissions on the database.