Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server erstellt benutzerdefinierte Tabellentypen mit Schema, das nicht ordnungsgemäß funktioniert

Anstatt in sys.objects zu suchen für diese sollten Sie in sys.types suchen oder sys.table_types (was zusätzlich die type_table_object_id verfügbar macht ).

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

Wenn Sie einen benutzerdefinierten Typ erstellen, fügt er eine Zeile zu sys.sysscalartypes hinzu mit dem vom Benutzer bereitgestellten Schema und Namen und einer Zeile zu sys.sysschobjs mit einem vom System generierten Namen im sys Schema. Der vom System generierte Name wird durch Verketten von TT_ erstellt + FriendlyName + _ + Hex-Version der Objekt-ID.

Die beiden Entitäten sind über sys.syssingleobjrefs miteinander verbunden

/*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'