Vista de sistema en SQL Server 2005 (Msg 208, Level 16, State 1, Line 1,Invalid object name 'sys.syscolpars'.)

Hola gente!, en esta ocasión les voy a comentar una datito interesante con respecto a MSSQL Server 2K5. Como ya sabemos ahora el acceso y modificación a tablas de sistema esta restringido, todo se realiza a través de vistas y stored procedures, por ejemplo y viene al caso la tabla sys.columns que en versiones anteriores es syscolumns, bueno, vamos a lo concreto, en estos momentos me encuentro desarrollando un proceso de migración de datos entre un MSSQLServer 7.0 SP4 y MSSQL2K5 SP1, en dicho desarrollo necesitaba obtener datos de la vista sys.columns y sys.column_type_usages, con sys.columns no tuve problemas pero con la vista sys.column_type_usages sí, pues estaba buscando una registro donde el campo utype sea < 256.

Si realizamos un sp_helptext ‘sys.column_type_usages’ veremos que la vista se encuentra definida de la siguiente manera:

CREATE VIEW sys.column_type_usages AS
SELECT id AS object_id,
colid AS column_id,
utype AS user_type_id
FROM sys.syscolpars
WHERE number = 0 AND utype > 256

Como muestra la definición de la vista, esta hace referencia a sys.syscolpars, si nosotros realizamos la siguiente consulta sin condiciones o filtro, nos da un error donde nos dice que el objeto no existe.

select * from sys.syscolpars

Msg 208, Level 16, State 1, Line 1
Invalid object name 'sys.syscolpars'.

Como hacemos para acceder a ese dato ?

Debemos recordar que existe una nueva base de datos llamada ‘mssqlsystemresource’ donde contiene todos los objetos de sistema como por ej: sys.objects que aparece en cada base de datos dentro del esquema sys.
Microsoft recomienda que a esta base de datos solo acceda personal de Microsoft Customer Support Services (CSS), pero en este caso y la vista al no satisfacer el requerimiento, no nos quedo otra alternativa que acceder y buscar el dato.

Procedimos a bajar el motor de base de datos y luego a levantarlo en single_user_mode, con la siguiente sentencia:

C:\MSSQL.1\MSSQL\Binn\sqlservr.exe -sMSSQLServer –m

Luego vía query analizer ejecutamos la consulta con éxito.

use mssqlsystemresource
go
select name,id,utype from sys.syscolpars where xtype =189

name id utype
-------------------- ----------- -----------
incremental_timestam 596959306 189
@timestamp 533452507 189
@timestamp 233465586 189

(3 row(s) affected)

Espero les sirva, mas que nada, cuando tengan que consultar datos de sistema que no estén dentro de las vistas dadas en esta versión de SQL Server 2K5.

Abrazo virtual y hasta la próxima.