sql >> Databasteknik >  >> RDS >> Sqlserver

Dynamisk pivotfråga utan att lagra frågan som sträng

Kort svar: nej.

Långt svar:

Tja, det är fortfarande nej . Men jag ska försöka förklara varför. Från och med idag, när du kör frågan, kräver DB-motorn att vara medveten om resultatuppsättningsstrukturen (antal kolumner, kolumnnamn, datatyper, etc) som frågan kommer att returnera. Därför måste du definiera strukturen för resultatuppsättningen när du frågar data från DB. Tänk på det:har du någonsin kört en fråga där du inte skulle känna till resultatuppsättningens struktur i förväg?

Det gäller även när du select * , som bara är en sockersyntax. I slutet är den returnerande strukturen "alla kolumner i sådana tabell(er)".

Genom att sätta ihop en sträng genererar du dynamiskt den struktur du önskar innan du frågar efter resultatuppsättningen. Det är därför det fungerar.

Slutligen bör du vara medveten om att sammansättning av strängen dynamiskt kan teoretiskt och potentiellt (även om det inte är troligt) får du en resultatuppsättning med oändliga kolumner. Naturligtvis är det inte möjligt och det kommer att misslyckas, men jag är säker på att du förstod konsekvenserna.

Uppdatera

Jag hittade detta, vilket förstärker anledningarna till att det inte fungerar.

Här :

Jag kommer att fortsätta leta och lägga till här.




  1. Använder variabel i SQL LIKE-satsen

  2. SQL Server ROWCOUNT_BIG()

  3. Deklarera syntaxfel i MYSQL Workbench

  4. SQL Server String eller binära data skulle trunkeras