तो आपको कुछ समस्याएं हैं ... पहला यह है कि इसके लिए गतिशील एसक्यूएल की आवश्यकता होती है क्योंकि तालिका और कॉलम समय से पहले ज्ञात नहीं होते हैं, इसलिए आप केवल एक साधारण अनपिवट का उपयोग नहीं कर सकते हैं।
इसका मतलब यह भी है कि आपको सिस्टम टेबल से कॉलम नाम प्राप्त करने होंगे।
आपकी दूसरी समस्या यह है कि आपके सभी डेटाटाइप अज्ञात हैं इसलिए आपको सभी कॉलम को किसी ऐसी चीज़ पर डालना होगा जो सब कुछ और किसी भी लम्बाई का समर्थन कर सके... varchar(max).
तो, उन दो बाधाओं को ध्यान में रखते हुए यहाँ एक समाधान है:
declare @yourTable varchar(50)
declare @yourKeyField varchar(50)
declare @yourKey varchar(50)
set @yourTable = 'MyTable' /** change to tablename or pass as parameter */
set @yourKeyField = 'ID' /** change to fieldname or pass as parameter */
set @yourKey = '5' /** change to key value or pass as parameter */
declare @query nvarchar(max)
select @query = COALESCE(@query+' union all ','') + 'select ''' + c.name + ''' as
[Column], Cast([' + c.name + '] AS VarChar(MAX)) as [Value] from ' + @yourTable + '
where ' + @yourKeyField + ' = ''' + @yourKey + '''' from syscolumns c
inner join sysobjects o on c.id = o.id and o.xtype = 'u'
where o.name = @yourTable order by c.colid
exec sp_executesql @query /** execute query */
अंत में, मैं अच्छे विवेक में ऐसे समाधान की अनुशंसा नहीं कर सकता जो गतिशील एसक्यूएल का उपयोग करता है, इसमें शामिल खतरों की चेतावनी के बिना (प्रदर्शन के दृष्टिकोण और इंजेक्शन की संभावना दोनों से)। यदि आप इस विषय पर अपना ज्ञान बढ़ाना चाहते हैं तो इस उत्कृष्ट लेख को पढ़ें।
http://www.sommarskog.se/dynamic_sql.html