sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server skapar användardefinierade tabelltyper med schemat som inte fungerar korrekt

Istället för att leta i sys.objects för dessa bör du titta i sys.types eller sys.table_types (vilket dessutom exponerar 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'

När du skapar en användardefinierad typ lägger den till en rad till sys.sysscalartypes med användarens schema och namn och en rad till sys.sysschobjs med ett systemgenererat namn i sys schema. Det systemgenererade namnet skapas genom att sammanfoga TT_ + FriendlyName + _ + Hexversion av objekt-id.

De två enheterna är relaterade till varandra via 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' 



  1. Multiplikationsaggregatoperator i SQL

  2. Hur man får tiden från en sträng i MySQL

  3. Fel:måste vara ägare till databasen

  4. Rails Activerecord/Postgres tidsformat