كيف يمكنني قائمة الأنواع المعرفة من قبل المستخدم في 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
.
يمكن لأي شخص أن ينير لي ؟
المحلول
أنواع UDTs لا تظهر في sys.الكائنات.يجب أن تكون قادرة على الحصول على ما تبحث عنه بما يلي:
select * from sys.types
where is_user_defined = 1
نصائح أخرى
على الرغم من المنصب القديم, لقد وجدت أنه من المفيد استخدام استعلام مشابهة لهذه.قد لا تجد بعض التنسيق مفيدة, ولكن أردت مؤهل بشكل كامل اسم نوع وأردت أن أرى الأعمدة المدرجة في النظام.يمكنك فقط إزالة كافة فرعية الاشياء لمجرد الحصول على اسم العمود في حد ذاته.
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