Ceea ce poate fi util dinamic sql


- iar rezultatul este trist, pentru că selectați operațiunea a avut succes, deoarece clienții DROP TABLE.
  • Este posibil că veți avea câteva variabile care conțin codurile de comandă. Ceva de genul asta EXEC (@ sql1 + @ sql2 + @ sql3).
    Ce dificultăți pot apărea aici?
    Trebuie să ne amintim că fiecare echipă va lucra separat, deși la prima vedere poate părea că operatorul de concatenare (@ sql1 + @ sql2 + @ sql3) vor fi efectuate. și apoi urmați comanda generală. De asemenea, trebuie amintit faptul că restricția generală impusă parametrul de comandă EXEC la 4000 de caractere.
  • Un mulaje implicite, deoarece parametrii sunt transmise ca șir.
  • Ce se va schimba atunci când se utilizează sp_executesql. - Developer mai ușor să scrie cod și depana-l, pentru că Codul este scris aproape ca o interogare SQL normală.

    Exemplu de cod cu sp_executesql:

    Planul de interogare utilizând sp_executesql:

    De asemenea, este unul dintre avantajele utilizării sp_executesql - este abilitatea de a returna o valoare prin parametrul OUT.

    Pentru acest exemplu, am rezolvat una dintre problemele din cadrul proiectului, folosind SQL dinamic.

    Să presupunem că avem o bună (dar nu contează, de fapt, este: profilul de produs pentru poziția, profilul personal). Ideea este ca fiecare obiect are propriul set de proprietăți (atribute) pe care-l caracterizează, și pot exista un număr diferit, iar acestea sunt de diferite tipuri. Cum se păstrează într-o bază de date - aceasta este o problemă de arhitectură.

    Pentru clientul avea nevoie de un raport care de la sine a reprezentat n rânduri prin m coloane. În cazul în care m și a fost setul nostru de atribute. Raportul a fost merge pe un grup de obiecte sau de un obiect din grup. Dar sensul rămâne aceeași: Fiecare raport conține un număr diferit de coloane pentru fiecare grup de obiecte.

    Încă de la început a existat o legătură între obiecte, soluția aleasă, fără a schimba arhitectura bazei de date. În opinia noastră, soluția la această problemă poate fi de mai multe:

    • Utilizați sistemul de raportare, de exemplu, MS SQL Raportarea Serviciilor. Crearea unui raport de matrice, precum și o cerere, vom fi „simplu» Select. De ce să nu facem? Proiectul nu a fost atât de mult rapoarte pentru a disloca la SSRS.
    • Utilizați aceeași „simplu“ și selectați de pe partea de server pentru a crea un set de date are „forma“ necesară. Da, problema a fost rezolvată inițial, atunci când datele produsului a fost foarte mic. Odată ce datele au fost destul de mult, în timp ce colectarea raport a fost în afara specificat timeout.
    • Utilizați Pivot în sql. Da, soluția perfectă atunci când știi că ai doar acele atribute, iar noi nu. Și ce să facă atunci când numărul de atribute se schimbă în mod frecvent. Din nou, pentru fiecare grup de obiecte avem propriul nostru set de atribute, ne întoarcem din nou la crearea de proceduri pentru fiecare grup de obiecte. Nu este o soluție foarte convenabil, nu-i așa?
    • Și dacă utilizați Pivot, dar adăugați puțin la sql dinamic. - Da, este o soluție care are dreptul la viață. Îl vom descrie, ca un exemplu de utilizare a sql dinamice ...

    Raportul se va baza pe o cerere normală:

    Codul principal pentru raport:

    articole similare