2008-09-10 24 views
24

SQL Serverデータベースで作成されたすべてのユーザー定義型をCREATE TYPEで列挙し、それらが既に定義されているかどうかを調べる必要があります。SQL Serverデータベースでユーザー定義型を一覧表示するにはどうすればよいですか?

if exists (select * from dbo.sysobjects where name='foobar' and xtype='U') 
    drop table foobar 

は、しかし、私は、ユーザー定義型と同等(または適切な代替)を見つけることができません:私はこのような何かをしたいテーブルまたはストアドプロシージャで

!私は間違いなくsysobjectsのどこにでもそれらを見ることができません。

誰でも私を啓発できますか?

答えて

54

型とUDTはsys.objectsには表示されません。 あなたは以下で探しているものを得ることができる必要があります:ポストが古い

select * from sys.types 
where is_user_defined = 1 
+4

どのように我々はタイプの記述(例えばユーザー定義テーブル型)を得ることができますか? – Naomi

6

が、私はそれが役に立つ次のようなクエリを使用することが判明しました。 便利な書式がいくつか見つかりませんが、完全修飾型の名前が必要でしたが、列の順序を見たいと思っていました。 SUBSTRINGのすべてを削除して、カラム名だけを取得することができます。 jwolly2の答えに拡大すること

SELECT USER_NAME(TYPE.schema_id) + '.' + TYPE.name  AS "Type Name", 
     COL.column_id, 
     SUBSTRING(CAST(COL.column_id + 100 AS char(3)), 2, 2) + ': ' + COL.name AS "Column", 
     ST.name           AS "Data Type", 
     CASE COL.Is_Nullable 
     WHEN 1 THEN '' 
     ELSE  'NOT NULL' 
     END            AS "Nullable", 
     COL.max_length         AS "Length", 
     COL.[precision]         AS "Precision", 
     COL.scale          AS "Scale", 
     ST.collation          AS "Collation" 
FROM sys.table_types TYPE 
JOIN sys.columns  COL 
    ON TYPE.type_table_object_id = COL.object_id 
JOIN sys.systypes AS ST 
    ON ST.xtype = COL.system_type_id 
where TYPE.is_user_defined = 1 
ORDER BY "Type Name", 
     COL.column_id 
1

は、ここにあなたが標準のデータ型を含む定義のリストを取得する方法は次のとおりです。

-- User Defined Type definitions TP 20180124 
select t1.name, t2.name, t1.precision, t1.scale, t1.max_length as bytes, t1.is_nullable 
from sys.types t1 
join sys.types t2 on t2.system_type_id = t1.system_type_id and t2.is_user_defined = 0 
where t1.is_user_defined = 1 and t2.name <> 'sysname' 
order by t1.name 
関連する問題