Onko jotain sellaista kuin direktiivi, jota voin käyttää komentosarjassa pakottaakseni SSMS: n ottamaan käyttöön / poistamaan SQLCMD-tilan?
Vastaa
Kuten on sanottu, sitä ei ole olemassa.
Yksi asia on kuitenkin do on sisällyttää pikatarkistus komentosarjojen otsikkoon sen selvittämiseksi, onko SQLCMD-tila päällä (ja lopeta komentosarja, jos ei):
:setvar DatabaseName "MyDatabase" GO IF ("$(DatabaseName)" = "$" + "(DatabaseName)") RAISERROR ("This script must be run in SQLCMD mode. Disconnecting.", 20, 1) WITH LOG GO -- The below is only run if SQLCMD is on, or the user lacks permission to raise fatal errors IF @@ERROR != 0 SET NOEXEC ON GO PRINT "You will only see this when SQLCMD mode is on" -- Rest of script goes here GO SET NOEXEC OFF GO
On Vakavuusasteen 20 käytöstä syystä se pyrkii tappamaan yhteyden välittömästi, mikä estää enää komentokoodin suorittamisen, vaikka komentosarjassa olisi myöhemmin GO
eräpäätteitä.
Ilmoita järjestelmäongelmista ja ovat kohtalokkaita virheitä, mikä tarkoittaa, että käskyä tai erää suorittava Database Engine -tehtävä ei ole enää käynnissä. Tehtävä tallentaa tiedot tapahtuneesta ja päättyy sitten. Useimmissa tapauksissa sovellusyhteys tietokantamoottorin ilmentymä voi myös lopettaa . Jos näin tapahtuu, ongelmasta riippuen Sovellus ei ehkä pysty muodostamaan yhteyttä uudelleen.
Tämän alueen virheilmoitukset voivat vaikuttaa kaikkiin prosesseihin, jotka käyttävät tietoja samassa tietokannassa, ja voivat viitata tietokannan tai objektin vioittumiseen. Virheilmoitukset, joiden vakavuusaste on 19–24, kirjoitetaan virhelokiin.
Kommentit
Vastaa
Ei
Mutta voit aina ajaa SQLCMD-tilassa ja sinulla on kuitenkin T-SQL .
Jotta SQLCMD-komennot ja Transact-SQL erotettaisiin selkeästi, kaikki SQLCMD-komennot on etuliitettävä kaksoispisteellä (:).
Kommentit
- Onko tämä edelleen voimassa SQL Server 2012/2014/2016: lle?
- @ hot2use: Kyllä, minä ' olen käyttänyt sitä 2014/2016
SET NOEXEC ON
lisäturvatoimenpiteenä estääksesi kaiken muun komentosarjan suorittamisen.incorrect syntax near ':'
, koska:setvar
on alussa …RAISERROR
vakavuustasoa 20 (ja sitä uudempaa) SQL pitää kohtalokkaana virheenä, jonka seurauksena yhteys katkeaa välittömästi, joten ei enää muita eriä (edesSET NOEXEC ON
) suoritetaan. SyyNOEXEC
-lausekkeiden olemassaoloon on katettava tilanne, jossa suorittavalle käyttäjälle ei olesysadmin
/ALTER TRACE
-oikeudet, joita tarvitaan kohtalokkaiden virheiden lisäämiseksi.