Ülevaade #
Pärast hiljutisi värskendusi saidil mssql-tööriistad paketiga, võivad kasutajad päringute täitmisel kogeda ootamatut käitumist sqlcmdTüüpiline käsu näide:
/usr/local/relianoid/app/libexec/sqlcmd -S -U -P -Q "vali arv(*) tabelist TABLE_0;"
Mõnel juhul ei tagastata päringuvigu õigesti käskude tõrgetena, mis võib mõjutada väljumiskoodidel põhinevaid skripte, automatiseerimist või jälgimisprotsesse (nt farmguardiani tervisekontrolle).
Põhjus #
See probleem on tingitud a käitumise muutus sqlcmd kasulikkus, mis on lisatud mssql-tööriistad pakendis.
Vaikimisi sqlcmd:
- Saadab SQL-vead standardväljundisse (stdout)
- Kas ei tagasta nullist erinevat väljumiskoodi kui päring ebaõnnestub
See tähendab, et isegi kui SQL-päringus ilmneb tõrge, võib käsk skriptimise seisukohast siiski õnnestununa tunduda.
Lahendus #
Selleks, et SQL-päringu vead õigesti käsitletaks ja tagastataks käskude tõrgetena, lisage see -b parameetris sqlcmd käsk
Uuendatud käsk:
/usr/local/relianoid/app/libexec/sqlcmd -b -S -U -P -Q "vali arv(*) tabelist TABLE_0;"
Kuidas see töötab #
. -b valik muudab sqlcmd käitumine järgmiselt:
- Põhjustab
sqlcmdet välju nullist erineva olekukoodiga kui ilmneb viga - Saadab veateateid aadressile standardviga (stderr) standardväljundi asemel
- Võimaldab skriptides ja automatiseerimistööriistades korralikku vigade tuvastamist
Miks see küsimused #
Ilma -b lipp:
- Jälgimissüsteemid ei pruugi tuvastada ebaõnnestunud päringuid
- Automaatskriptide täitmist võidakse jätkata hoolimata vigadest
- Veaotsing muutub eksitavate eduseisundite tõttu keerulisemaks
Lisades -b, te tagate:
- Täpne veakäsitlus
- Usaldusväärne skriptimise käitumine
- Nõuetekohane integreerimine süsteemi jälgimise ja teavitamisega
Lisamärkused #
- See käitumine on iseloomulik
sqlcmdtööriist alates mssql-tööriistad pakend - Olemasolevad skriptid tuleks üle vaadata ja vastavalt ajakohastada
- SQL Serveri poolel pole vaja muudatusi teha
kokkuvõte #
Muutus sqlcmd käitumine võib takistada SQL-vigade korralikku teatamist. -b parameeter tagab päringuvigade korrektse edastamise väljumiskoodide ja veaväljundi kaudu, säilitades usaldusväärse automatiseerimise ja jälgimise.