Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server crea tipi di tabella definiti dall'utente con lo schema che non funziona correttamente

Invece di cercare in sys.objects per questi dovresti cercare in sys.types o sys.table_types (che espone inoltre il 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 crei un tipo definito dall'utente, viene aggiunta una riga a sys.sysscalartypes con lo schema e il nome forniti dall'utente e una riga a sys.sysschobjs con un nome generato dal sistema in sys schema. Il nome generato dal sistema viene creato concatenando TT_ + Nome descrittivo + _ + Versione esadecimale dell'ID oggetto.

Le due entità sono correlate insieme tramite 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'