sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server crea tipos de tablas definidas por el usuario con un esquema que no funciona correctamente

En lugar de buscar en sys.objects para estos debe buscar en sys.types o sys.table_types (que además expone el type_table_object_id ).

SELECT name,
       schema_id /*Will be the "test" schema id*/
FROM   sys.types
WHERE  is_table_type = 1
       AND name = 'MyUserTableType'

Cuando crea un tipo definido por el usuario, agrega una fila a sys.sysscalartypes con el esquema y el nombre proporcionados por el usuario y una fila para sys.sysschobjs con un nombre generado por el sistema en sys esquema. El nombre generado por el sistema se crea concatenando TT_ + NombreAmistoso + _ + Versión hexadecimal de la identificación del objeto.

Las dos entidades están relacionadas a través de sys.syssingleobjrefs

/*This query only works via the DAC*/
SELECT so.id AS object_id,
       st.id AS user_type_id,
       *
FROM   sys.sysschobjs so
       JOIN sys.syssingleobjrefs sor
         ON sor.indepid = so.id
       JOIN sys.sysscalartypes st
         ON st.id = sor.depid
WHERE  st.name = 'MyUserTableType'