2012-08-17 15 views
5

में कॉलम के स्रोत तालिका नाम को कैसे सूचीबद्ध करें बस एक प्रश्न के लिए एक क्वेरी में कॉलम नाम और तालिका नाम को सूचीबद्ध करने का तरीका सोच रहा है।VIEW (SQL Server 2005)

उदाहरण के लिए:

एक दृश्य tbl1 inner join tbl2 से बनाने के लिए, viewC के रूप में नामित, a,b,c,d कॉलम (a,btbl1 से और c,dtbl2 से) होते हैं।

कैसे

Select COLUMN_NAME, DATA_TYPE, column_default, character_maximum_length, sourceTableNAME 
FROM information_schema.columns 
where table_name='viewC' 

एक साथ करने के लिए?

उत्तर

8

यह जानकारी INFORMATION_SCHEMA विचारों से उपलब्ध है: आपके विचार एक से अधिक डेटाबेस से तालिकाएँ शामिल

SELECT * 
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS cu 
JOIN INFORMATION_SCHEMA.COLUMNS AS c 
ON  c.TABLE_SCHEMA = cu.TABLE_SCHEMA 
AND  c.TABLE_CATALOG = cu.TABLE_CATALOG 
AND  c.TABLE_NAME = cu.TABLE_NAME 
AND  c.COLUMN_NAME = cu.COLUMN_NAME 
WHERE cu.VIEW_NAME = '<your view name>' 
AND  cu.VIEW_SCHEMA = '<your view schema>' 

हैं, तो क्वेरी बन जाएगा काफी जटिल

+2

यह कॉलम नाम और तालिका नाम हाँ दिखाता है। लेकिन मेरे मामले में आवश्यक उपनाम नाम बोना नहीं है। –

+0

क्या कोई अंतर्निहित तालिका कॉलम नामों से जुड़े दृश्य कॉलम उपनाम नाम देखने के लिए क्वेरी को समझने में सक्षम था? – AS91

1

इस प्रयास करें:

SELECT * FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS VCU 
JOIN INFORMATION_SCHEMA.COLUMNS AS COL 
ON COL.TABLE_SCHEMA = VCU.TABLE_SCHEMA 
AND COL.TABLE_CATALOG = VCU.TABLE_CATALOG 
AND COL.TABLE_NAME = VCU.TABLE_NAME 
AND COL.COLUMN_NAME = VCU.COLUMN_NAME 
WHERE VCU.VIEW_NAME = 'ViewName' 

See this SQLFiddle

0

मेरे पास एक दृश्य (SQL सर्वर 2012) था जो किसी अन्य डेटाबेस से पढ़ता था और साथ ही यूनियन भी था। उपर्युक्त प्रश्न मेरे लिए काम नहीं करते थे, इसलिए मैंने यह जांचने के लिए प्रोफाइलर का उपयोग करने का फैसला किया कि एसएसएमएस कैसे जानकारी पुनर्प्राप्त करेगा। यही वह है जो मैंने समाप्त किया:

SELECT 
    clmns.name AS [Name] 
    ,usrt.name AS [DataType] 
    ,CAST(CASE WHEN baset.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS int) AS [Length] 
    ,CAST(clmns.precision AS int) AS [NumericPrecision] 
    ,CAST(clmns.scale AS int) AS [NumericScale] 
    ,clmns.column_id AS [ID] 
FROM sys.all_views AS v 
INNER JOIN sys.all_columns AS clmns 
    ON clmns.object_id=v.object_id 
LEFT OUTER JOIN sys.indexes AS ik 
    ON ik.object_id = clmns.object_id 
    AND 1=ik.is_primary_key 
LEFT OUTER JOIN sys.types AS usrt 
    ON usrt.user_type_id = clmns.user_type_id 
LEFT OUTER JOIN sys.types AS baset 
    ON (baset.user_type_id = clmns.system_type_id AND baset.user_type_id = baset.system_type_id) 
    OR ((baset.system_type_id = clmns.system_type_id) AND (baset.user_type_id = clmns.user_type_id) AND (baset.is_user_defined = 0) AND (baset.is_assembly_type = 1)) 
LEFT OUTER JOIN sys.xml_schema_collections AS xscclmns 
    ON xscclmns.xml_collection_id = clmns.xml_collection_id 
WHERE v.[type] = 'V' 
    AND v.name ='<your view name>' 
    AND SCHEMA_NAME(v.schema_id)='<your schema name>' 
ORDER BY [ID] ASC 
संबंधित मुद्दे