sql >> Databáze >  >> RDS >> Sqlserver

Optimalizace SQL:Xml nebo Delimited String

Nyní existuje 4. možnost – parametry s hodnotou tabulky , čímž můžete skutečně předat tabulku hodnot do sproc jako parametr a pak ji použít jako normálně proměnnou tabulky. Dávám přednost tomuto přístupu před přístupem XML (nebo přístupem analýzy CSV)

Nemohu citovat údaje o výkonu mezi všemi různými přístupy, ale o to bych se pokusil – doporučoval bych na nich provést nějaké skutečné testy výkonu.

Upravit:
Trochu více o TVP. Aby bylo možné předat hodnoty do vašeho sproc, stačí definovat SqlParameter (SqlDbType.Structured) - hodnotu lze nastavit na jakýkoli zdroj IEnumerable, DataTable nebo DbDataReader. Pravděpodobně tedy již máte seznam hodnot v nějakém seznamu/poli – pro jeho transformaci do XML nebo CSV nemusíte nic dělat.

Myslím, že to také dělá sproc jasnější, jednodušší a udržitelnější, což poskytuje přirozenější způsob, jak dosáhnout konečného výsledku. Jedním z hlavních bodů je, že SQL si vede nejlépe při činnostech s manipulací s řetězci/bez smyčky/bez řetězců.

To neznamená, že bude fungovat skvěle s velkou sadou předávaných hodnot. Ale s menšími sadami (až ~1000) by to mělo být v pořádku.



  1. Oracle Select * vrátí řádky, ale Select count(1) vrátí 0

  2. SQL dotaz na více databází

  3. Běžné chyby při migraci databází PostgreSQL z On-Prem na AWS RDS

  4. Vložit data do tabulky najednou, která se načte z mySQL příkazu select