2008-09-10 11 views
24

मुझे CREATE TYPE के साथ SQL Server डेटाबेस में बनाए गए सभी उपयोगकर्ता परिभाषित प्रकारों की गणना करने की आवश्यकता है, और/या पता लगाएं कि वे पहले ही परिभाषित किए गए हैं या नहीं।मैं SQL सर्वर डेटाबेस में उपयोगकर्ता परिभाषित प्रकारों को कैसे सूचीबद्ध करूं?

टेबल या संग्रहित प्रक्रियाओं मैं इस तरह कुछ करना चाहते हैं के साथ:

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

हालांकि मैं उपयोगकर्ता परिभाषित प्रकार के लिए बराबर (या एक उपयुक्त विकल्प) नहीं मिल सकता है! मैं निश्चित रूप से उन्हें sysobjects में कहीं भी नहीं देख सकता।

क्या कोई मुझे प्रबुद्ध कर सकता है?

उत्तर

54

प्रकार और यूडीटी sys.objects में प्रकट नहीं होते हैं। आप आप निम्नलिखित के साथ जो खोज रहे हैं पाने के लिए सक्षम होना चाहिए:

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

हम कैसे प्रकार के विवरण (जैसे उपयोगकर्ता निर्धारित तालिका प्रकार) मिल सकता है? – Naomi

6

हालांकि पोस्ट पुरानी है, मैं इसे उपयोगी एक प्रश्न इस के समान उपयोग करने के लिए मिल गया। आपको कुछ स्वरूपण उपयोगी नहीं मिल सकते हैं, लेकिन मैं पूरी तरह से योग्य प्रकार का नाम चाहता था और मैं क्रम में सूचीबद्ध कॉलम देखना चाहता था। आप केवल कॉलम नाम प्राप्त करने के लिए सभी सब्सट्रिंग सामग्री को हटा सकते हैं।

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

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 
संबंधित मुद्दे