كيف يمكنني قائمة الأنواع المعرفة من قبل المستخدم في SQL Server قاعدة البيانات ؟

StackOverflow https://stackoverflow.com/questions/54482

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top