title: SQL Server -- updating the `sys.*` tables and not just reading them
body: <p>In an attempt to the query</p>
  
  <pre><code>UPDATE sys.columns 
  SET user_type_id = 106
  WHERE object_id in (select object_id from sys.objects where type = 'U') and user_type_id = 108
  </code></pre>
  
  <p>I'm getting the error:</p>
  
  <blockquote>
    <p>Msg 259, Level 16, State 1, Line 1<br>
    Ad hoc updates to system catalogs are not allowed.</p>
  </blockquote>
  
  <p>Is there a way to get around this? In this case, I'm looking to change the types of all decimal fields of all the tables in the database. </p>
  
  <p>Can do this "externally"-- without direct tampering with <code>sys.*</code> tables (haven't yet pinned down how-to though), but I'm looking to know whether I can update the <code>sys.*</code> tables -- and if so, which ones, when/how? </p>
  
  <p>// =========================</p>
  
  <p><strong>EDIT:</strong> </p>
  
  <p>would i be able to get any "deeper" than <code>alter table...</code> if i had full privileges for db access? 
  not sure what kind of privileges i have now, but would look into it. </p>