Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dynamiczne zapytanie przestawne bez przechowywania zapytania jako String

Krótka odpowiedź: nie.

Długa odpowiedź:

Cóż, to nadal nie . Ale postaram się wyjaśnić dlaczego. Na dzień dzisiejszy, gdy uruchamiasz zapytanie, silnik bazy danych wymaga znajomości struktury zestawu wyników (liczba kolumn, nazwy kolumn, typy danych itp.), które zwróci zapytanie. Dlatego musisz zdefiniować strukturę zbioru wyników, gdy pytasz o dane z DB. Pomyśl o tym:czy kiedykolwiek uruchomiłeś zapytanie, w którym nie znasz wcześniej struktury zestawu wyników?

Dotyczy to również sytuacji, gdy select * , który jest tylko składnią cukru. Na końcu zwracana struktura to "wszystkie kolumny w takiej tabeli(ach)".

Składając łańcuch, dynamicznie generujesz pożądaną strukturę, zanim poprosisz o zestaw wyników. Dlatego to działa.

Na koniec powinieneś mieć świadomość, że dynamiczne składanie łańcucha może teoretycznie i potencjalnie (chociaż mało prawdopodobne) da ci zestaw wyników z nieskończonymi kolumnami. Oczywiście nie jest to możliwe i zakończy się niepowodzeniem, ale jestem pewien, że rozumiesz konsekwencje.

Aktualizacja

Znalazłem to, co potwierdza powody, dla których to nie działa.

Tutaj :

Będę dalej szukał i dodawał tutaj.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuń konto pocztowe bazy danych z profilu (SSMS)

  2. SQL Server:Wyodrębnij metadane tabeli (opis, pola i ich typy danych)

  3. wyświetlanie wielu rekordów za pomocą zestawu wyników

  4. Msg 8672, poziom 16, stan 1, wiersz 1 Instrukcja MERGE próbowała UPDATE lub DELETE tego samego wiersza więcej niż raz

  5. Czy możesz mieć logikę „jeśli-to-inaczej” w SQL?