2016-04-06 23 views
0

numaralı sütun adları içeren birleştirilmiş dizeye dönüştürülüyor Yüzlerce sütun genişliğinde bir tablom var. Her bir satırı, sorgudaki her bir sütunu listelemeye gerek kalmadan içerilen sütun başlığı ile tek bir birleştirilmiş dizeye dönüştürmenin bir yolu var mı? Bazılarını bir sorgu ile yaptım, ancak bu her sütun için yapmak zahmetli ve hataya eğilimli görünüyor.Satır,

SELECT 
Concat( 
    IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n')) , 
    IIf(StandardClientId IS NULL, Null, 
    Concat('StandardClientId: ' , [StandardClientId] , '\n')) , 
    IIf(ClientName IS NULL, Null, 
    Concat('ClientName: ' , [ClientName] , '\n')) 
) AS ReportLine 
FROM dbo.DataDecoded; 

Microsoft SQL Server 2014 Standard kullanıyorum: Burada kolon-by-sütunda yaklaşımında yapılan ihtiyacım formatında birleştirilmiş üç sütun gösteren kısa snippet'idir.

SELECT ORDINAL_POSITION, 
    COLUMN_NAME, 
    CONCAT('IIF(',COLUMN_NAME,' IS NULL, NULL, CONCAT(''', COLUMN_NAME, ''', '': '',', QUOTENAME(COLUMN_NAME), ', ''\n'')), ') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'DataDecoded' 
ORDER BY ORDINAL_POSITION; 

Bir adım daha ileri sürebilir ve her şeyi yapmak:

Teşekkür

+2

Bu, sunum katmanında çok daha kolay bir şekilde gerçekleştirilebilir. Bu bilgiyi görüntülemek için ne kullanıyorsunuz? –

+0

Muhtemelen dinamik SQL ile veya sorguyu "INFORMATION_SCHEMA.COLUMNS" sorgulayarak yapılandırabilirsiniz, ancak uygulamanızda bu biçimlendirmeyi neden yapmıyorsunuz? Neyi başarmaya çalıştığını anlamıyorum. Neredeyse tabloyu UNPIVOT yapmaya çalıştığınız gibi görünüyor. –

+0

Seçilen her satırın raporlarını yazdırmak için bunu kullanıyorum. Her satır bir oluşum raporunu temsil eder ve her sütun rapordaki bir alanı temsil eder. Bu nedenle, belirli bir raporu anlamaya çalışan insanlar, bu şekilde ortaya konmuş olmalıdır. – rsjaffe

cevap

1

Bunu yapmanın en kolay yolu, sizin için ifadenin rahatsız edici bölümünü yazan bir sorgu yazmaktır Bir sproldeki dinamik, ama bu zaman kaybı olabilir.

+0

, burada üzerine inşa etmek mümkün olabilir basit bir şey information_schema.columns WHERE TABLE_NAME = 'Adres' VE table_schema =' Kişi' XML PATH İÇİN ('') –