Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server cria tipos de tabela definidos pelo usuário com esquema não funcionando corretamente


Em vez de procurar em sys.objects para isso você deve procurar em sys.types ou sys.table_types (que expõe adicionalmente o 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'

Quando você cria um tipo definido pelo usuário, ele adiciona uma linha a sys.sysscalartypes com o esquema e nome fornecidos pelo usuário e uma linha para sys.sysschobjs com um nome gerado pelo sistema no sys esquema. O nome gerado pelo sistema é criado concatenando TT_ + FriendlyName + _ + Versão hexadecimal do id do objeto.

As duas entidades estão relacionadas atravé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'