如何在Sybase中获取所有用户定义的数据类型?

时间:2011-06-22 05:25:35

标签: sql tsql sybase

请帮助我在sybase数据库中查找所有用户定义的数据类型。

谢谢!

3 个答案:

答案 0 :(得分:2)

注意:我意识到这是前一段时间被问过的,但是我发现它正在寻找答案,所以我想把它放在这里。

这些类型都是systypes,但是它们没有明确地描述为用户和系统类型。似乎所有系统类型都将accessrule设置为NULL,并且我的所有用户类型都将此设置为0,因此我使用了以下内容:

SELECT * FROM systypes WHERE accessrule != NULL

这对我正在做的事情已经足够了。

您可以在以下位置查看有关systypes表(以及其他相关表)的更多信息: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.tables/html/tables/tables69.htm

答案 1 :(得分:1)

由于sybase就像使用profiler的SQL服务器,我得到了这个查询。 如果它不起作用,请使用类似于sybase的分析器工具,创建用户定义的类型,并检查它更新的系统表。

SELECT
'Server[@Name=' + quotename(CAST(serverproperty(N'Servername') AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/UserDefinedDataType[@Name=' + quotename(st.name,'''') + ' and @Schema=' + quotename(sst.name,'''') + ']' AS [Urn],
st.name AS [Name],
sst.name AS [Schema],
baset.name AS [SystemType],
CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar') AND st.max_length <> -1 THEN st.max_length/2 ELSE st.max_length END AS int) AS [Length],
CAST(st.precision AS int) AS [NumericPrecision],
CAST(st.scale AS int) AS [NumericScale],
st.is_nullable AS [Nullable]
FROM
sys.types AS st
INNER JOIN sys.schemas AS sst ON sst.schema_id = st.schema_id
LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = st.system_type_id and baset.user_type_id = baset.system_type_id
WHERE
(st.schema_id!=4 and st.system_type_id!=240 and st.user_type_id != st.system_type_id)
ORDER BY
[Schema] ASC,[Name] ASC

答案 2 :(得分:-1)

select
     convert(char(15),a.name) [user type]
     ,(select convert(varchar(10),b.name) 
       from systypes b 
       where b.type=a.type  
       having b.usertype = min(b.usertype))
     + case
when (select b.name from systypes b 
      where b.type=a.type  
      having b.usertype = min(b.usertype) )='char'
then '('+convert(varchar(10),a.length)+')'
end
     ,a.prec
     ,a.scale
FROM systypes a
WHERE accessrule != NULL
go