Kuvatud on postitused sildiga MSSQL. Kuva kõik postitused
Kuvatud on postitused sildiga MSSQL. Kuva kõik postitused

Sellest, et dünaamiline SQL on vahel vajalik..

.. näiteks siis kui sul on vaja N väga sarnase objekti kohta koostada päringud/trigeri/SP väljatöötatud mustri järgi, aga sa EI taha seda N-realist lohet ringi kopeerida ja kukkuda iga muudatuse peale N korda rohkem (nüri) tööd tegema.  Kui N läheneb kümnetele või sadadele, siis dünaamiline SQL võib olla su sõber.

KURI on seda aga liiast kasutada, sest tulemuse loetavus on vähegi keerukama loogika korral väga halb, optimeerijale on see black box ja abivahendid ei oska su dünaamilisest päringust ilma kõikidele loogikaharudele vastavaid päringuid käivitamata hoiatusi/vigu välja noppida.

Hea ülevaate, mis on võimalik, mis ok ja mis mitte avastasin näiteks siit:

http://www.sommarskog.se/dynamic_sql.html

MSSQL-spetsiifiline, aga mulle sobib ..

Sellest, kuidas SQLis kuupäevad keele-sõltumatud hoida..

Seoses avastusega, et ma olen kunagi lohakat koodi kirjutanud ja lubamatult eeldanud, et MSSQL sööb DateTime InvariantCulture väljundit. Sööbki, kui keeled, baasis määratud formaat jms sobivad. Lollikindel on aga kasutada sõltumatut formaati, näiteks ISO8601 (kuju
1999-02-23T22:33:44), mida väljastab näiteks DateTime.ToString("s").

Hea ülevaade teistest võimalustest on toodud siin:
The ultimate guide to the datetime datatypes

Sellest kuidas käsurealt MSSQL andmeid kätte saada..

KL soojal soovitusel uurisin pisut MSSQL2005 utiliiti nimega bcp (loe: Bulk Copy), mis võimaldab otse käsurealt vahendada andmeid baasi ja andmetega failide vahel. Süntaks on mõõdukalt lihtne, kuid omab siiski paari twisti. Paar näidet kasutamisest allpool:

1) Väljastada tabeli X_USER sisu faili bcpTest.txt

C:\>bcp SomeDb..X_USER out bcptest.txt -c -C RAW -Usa -Slocalhost

Tähelepanu tuleks pöörata siis kindlasti vajadusele määrata kuidas kooditabelitega hakkama saada (-C RAW), muidu komistad sa pikalt ja pidevalt järgmise veateate otsa:

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Code page 775 is not supported by SQL Server
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC SQL Server Driver]Unable to resolve column level collations

BCP copy out failed

Antud lahendust ja põhjuseid kirjeldatakse ka siin.

2) Väljastada üks baasis hoitab pdf faili bcptest.pdf (image andmetüübist)

C:\>bcp "select DATA from SomeDb..DATA_FILE where ID=1281" queryout bcptest.pdf -Usa -localhost -N

Andmete sisestamiseks on samuti vahendid. Samuti saab seadistada veel tulesid-vilesid. Näiteks muuta veeru- ja reaeraldajaid.