2011-06-22 31 views

回答

1

由於sybase就像使用探查器的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 
+0

好吧,讓我來試試.. – SSE

1

注:我知道這是問前一段時間,但我碰到它尋找的答案,所以想我應該把它放在這裏。

這些類型都在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
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 
+1

請解釋一點,請參閱:[如何回答]( http://stackoverflow.com/help/how-to-answer)。 – agold

相關問題