Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server tworzy typy tabel zdefiniowane przez użytkownika, których schemat nie działa poprawnie

Zamiast szukać w sys.objects w tym celu powinieneś zajrzeć do sys.types lub sys.table_types (co dodatkowo ujawnia 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'

Kiedy tworzysz typ zdefiniowany przez użytkownika, dodaje on wiersz do sys.sysscalartypes z podanym przez użytkownika schematem i nazwą oraz wierszem do sys.sysschobjs z nazwą wygenerowaną przez system w sys schemat. Wygenerowana przez system nazwa jest tworzona przez połączenie TT_ + Przyjazna nazwa + _ + Wersja szesnastkowa identyfikatora obiektu.

Te dwie jednostki są powiązane ze sobą poprzez 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - oblicz czas, jaki upłynął między dwoma znacznikami daty i godziny w formacie GG:MM:SS

  2. Korzystasz z 3 aktualizacji w tej samej procedurze sklepu? Mały błąd

  3. Bardziej elegancki sposób na ucieczkę od dynamicznego SQL?

  4. Zwróć parametry procedury składowanej lub funkcji zdefiniowanej przez użytkownika w programie SQL Server (przykłady T-SQL)

  5. Konwertuj obiekt SQL Server DateTime na BIGINT (takty .Net)