请帮助我在sybase数据库中查找所有用户定义的数据类型。
谢谢!
答案 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