Запросить все пользовательские типы с Sql Server? - PullRequest
2 голосов
/ 16 июня 2009

Как я могу запросить все пользовательские типы данных с сервера SQL, как это делается для объекта базы данных, который хранится в sysobjects.

Ответы [ 7 ]

6 голосов
/ 16 июня 2009

В SQL Server 2005 (и выше) вы можете сделать это

SELECT * FROM sys.Types WHERE is_user_defined = 1

Если вы используете SQL Server 2000, вы можете использовать SysTypes. Я думаю, что запрос выглядит следующим образом:

SELECT * FROM SysTypes WHERE xusertype > 256
1 голос
/ 17 июля 2014

Нет стандартного запроса для получения всех пользовательских баз данных в одиночку. Мы можем использовать

select * from sys.databases

Но это показывает все базы данных, я использую Студию управления сервером. Поэтому по умолчанию у меня есть следующие базы данных с именем: 'Master','tempdb','msdb','model'

Поэтому я всегда использую этот следующий запрос для получения пользовательских баз данных.

select * from sys.databases where name not in('master','model','msdb','tempdb')

Работает нормально. Если у вас есть дополнительные базы данных по умолчанию, это будут следующие (ресурс, дистрибуция, reportservice, reportservicetemp). Просто используйте имена в этом запросе.

1 голос
/ 16 июня 2009

Если вы все еще пользуетесь SQL Server 2000 (как предполагает использование sysobjects), посмотрите в systypes. Если вы используете SQL Server 2005 или более позднюю версию, как говорит rwwilden, вы должны использовать sys.types (и перейти к использованию sys.objects вместо sysobjects!)

1 голос
/ 16 июня 2009

Для этого вы можете использовать представление sys.types. Если user_type_id и system_type_id различны, у вас есть тип пользователя.

Как говорит AakashM, представление sys.types доступно только в SQL Server 2005 и более поздних версиях.

РЕДАКТИРОВАТЬ: лучший способ определить, является ли тип определяемым пользователем типом, это проверить флаг is_user_defined (см. Ответ Тима С.).

0 голосов
/ 21 марта 2019

Вы также можете найти их в INFORMATION_SCHEMA.DOMAINS. лично я предпочитаю использовать это по схеме sys, поскольку это стандарт ANSI, который работает с несколькими типами баз данных.

0 голосов
/ 06 сентября 2013

На самом деле system_type_id, отличающийся от user_type_id, НЕ является хорошим показателем. Обратите внимание, что это:

SELECT * FROM sys.Types 
WHERE (system_type_id <> user_type_id)
AND is_user_defined = 0.

Возвращает эти:

  • 1007 * `hierarchyid` *
  • геометрия
  • География
  • SYSNAME

Так что используйте SELECT * FROM sys.types WHERE is_user_defined = 1, как было указано Тимом С. и Рональдом Вильденбергом

0 голосов
/ 17 октября 2009

Вы можете использовать представления INFORMATION_SCHEMA. INFORMATION_SCHEMA.ROUTINES имеет UDF и хранимые процедуры. INFORMATION_SCHEMA.TABLES имеет таблицы и представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...