2016-03-22 19 views
4

listeden sütun adları geçmek sütun adları olarak şu şekilde görünmelidir hangi: burada b.ref bkzSQL Dinamik yolu ben şuna benzer ben sütunu <code>namea</code> depolamak bir tablo var

select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_1** 
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_4** 
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_6** 
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_100** 

_ {#} dinamik geçmesi gerektiğini, bunu herhangi bir yolu var mı?

C# komut dosyasını veya SQL Server Entegrasyon hizmetlerini kullanarak bunu kolayca yapabilirim, ancak bunu T_SQL'de yapmak isterim? peşin

sayesinde

+0

Seçtiniz ifadeniz doğru değil mi? From cümlede eksik tablo 'a'. – AKS

+0

Belirli bir sütun için tüm sütunlar için komut dosyasına ihtiyacınız var mı? – DhruvJoshi

cevap

1
declare @str varchar(max) = (
    select 'select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = b. ' + your_column_table.header 
    from your_column_table 
) 

o zaman ayrı sql deyimi oluşturmak istiyorsanız

, sen your_column_table üzerinde döngü gerekir @str yürütmek ve varsa aynı şeyi

+0

Flickers yaklaşımı hile yaparken, tercih edilen yaklaşım sp_execute_sql kullanmak olacaktır. – Vincent

0

yapabilirsiniz her bir sütun adı için bir sorgu çalıştırmanız ve aşağıdaki sorguyu deneyebilmeniz gerekir:

DECLARE @q nvarchar(max) 
DECLARE @ctr INT 

SELECT @ctr= COUNT(1) FROM mytable1 

WHILE (@ctr>0) 
BEGIN 

    SELECT @q= 
     'select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = b.' + 
     namea 
    FROM (
      SELECT namea, ROW_NUMBER() OVER(ORDER BY namea ASC) AS R 
      FROM mytable1 
     ) T WHERE [email protected] 

    SET @[email protected] 
    EXEC(@q) 
END 

Örnek çıktı enter image description here

İlgili konular