是否从Sql Server查询所有用户定义的类型?

是否从Sql Server查询所有用户定义的类型?,sql,sql-server,Sql,Sql Server,如何像查询存储在sysobjects中的数据库对象那样,从sql server查询所有用户定义的数据类型。您可以使用视图进行查询。当user\u type\u id和system\u type\u id不同时,您有一个用户类型 正如AakashM所说,sys.types视图仅在SQLServer2005及更高版本中可用 编辑:确定类型是否为用户定义类型的更好方法是检查is\u user\u defined标志(请参阅Tim C的答案)。如果您仍然使用SQL Server 2000(正如您使用's

如何像查询存储在sysobjects中的数据库对象那样,从sql server查询所有用户定义的数据类型。

您可以使用视图进行查询。当
user\u type\u id
system\u type\u id
不同时,您有一个用户类型

正如AakashM所说,
sys.types
视图仅在SQLServer2005及更高版本中可用


编辑:确定类型是否为用户定义类型的更好方法是检查
is\u user\u defined
标志(请参阅Tim C的答案)。

如果您仍然使用SQL Server 2000(正如您使用'
sysobjects
'所表明的那样),请查看
systypes
。如果您使用的是SQL Server 2005或更高版本,正如rwwilden所说,您应该使用
sys.types
(并使用
sys.objects
,而不是
sysobjects
!)

在SQL Server 2005(及更高版本)中,您可以这样做

SELECT * FROM sys.Types WHERE is_user_defined = 1
如果您使用的是SQL Server 2000,则可以使用系统类型。我认为问题如下:

SELECT * FROM SysTypes WHERE xusertype > 256

您可以使用架构视图中的信息。信息\u SCHEMA.ROUTINES具有自定义项和存储过程。信息\u SCHEMA.TABLES有表和视图。

实际上,系统类型\u id与用户类型\u id不同并不是一个好的指示。请注意:

SELECT * FROM sys.Types 
WHERE (system_type_id <> user_type_id)
AND is_user_defined = 0.
从系统类型中选择*
其中(系统类型\u id用户类型\u id)
并且是用户定义的=0。
返回这些:

  • 等级的
  • 几何学
  • 地理
  • 系统名

因此,使用
SELECT*FROM sys.types WHERE is_user_defined=1
正如Tim C和Ronald Wildenberg所指出的那样,没有标准的查询来单独获取所有用户定义的数据库。我们可以使用

select * from sys.databases
但它显示了所有的数据库,我使用的是服务器管理工作室。因此,默认情况下,我有以下数据库名:
'Master','tempdb','msdb','model'

所以我总是使用下面的查询来获取用户定义的数据库

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

它很好用。如果默认情况下您有额外的数据库,那么它将是以下数据库(资源、分发、reportservice、reportservicetemp)。只需在该查询中使用名称。

您也可以在INFORMATION\u SCHEMA.DOMAINS中找到这些名称。 就个人而言,我更喜欢在sys模式上使用它,因为它是一个ANSI标准,适用于多种类型的数据库

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