SQL Server 데이터베이스에서 사용자 정의 유형을 어떻게 나열합니까?
-
09-06-2019 - |
문제
생성된 모든 사용자 정의 유형을 열거해야 합니다. SQL Server
데이터베이스 CREATE TYPE
, 및/또는 이미 정의되었는지 확인합니다.
테이블이나 저장 프로시저를 사용하면 다음과 같은 작업을 수행할 수 있습니다.
if exists (select * from dbo.sysobjects where name='foobar' and xtype='U')
drop table foobar
그러나 사용자 정의 유형에 해당하는(또는 적절한 대안)을 찾을 수 없습니다!확실히 그 어디에서도 볼 수 없어 sysobjects
.
누구든지 나에게 깨달을 수 있습니까?
해결책
유형과 UDT는 sys.objects에 표시되지 않습니다.다음을 통해 원하는 것을 얻을 수 있어야 합니다.
select * from sys.types
where is_user_defined = 1
다른 팁
게시물이 오래되었지만 이와 유사한 쿼리를 사용하는 것이 유용하다는 것을 알았습니다.일부 형식이 유용하지 않을 수도 있지만 저는 정규화된 유형 이름을 원했고 열이 순서대로 나열되어 있는지 확인하고 싶었습니다.SUBSTRING 항목을 모두 제거하면 열 이름만 얻을 수 있습니다.
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
jwolly2의 답변을 확장하기 위해 표준 데이터 유형을 포함한 정의 목록을 얻는 방법은 다음과 같습니다.
-- 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
제휴하지 않습니다 StackOverflow