Voinko ottaa SQLCMD-tilan käyttöön komentosarjan sisällä?

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ä.

Vakavuudet 20–24 :

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

  • Ssms: lle riittää kaksi ensimmäistä riviä ja sql 2000 Query Analyzerille se toimii, mutta viestiä ei näytetä.
  • Mutta ei ' t komentosarja jatka vain suorittamista seuraavasta GO: sta?
  • Kuten täällä mainittiin , voit myös asettaa SET NOEXEC ON lisäturvatoimenpiteenä estääksesi kaiken muun komentosarjan suorittamisen.
  • @Dan Nolan: Katson, että jotenkin jätin väliin 3. rivin pisteen. Joten jos ymmärrän sen oikein, ' ei ole ratkaisua kattamaan SQLCMD-tilaa. Se näyttää olennaisesti incorrect syntax near ':', koska :setvar on alussa …
  • @youcantryreachingme RAISERROR vakavuustasoa 20 (ja sitä uudempaa) SQL pitää kohtalokkaana virheenä, jonka seurauksena yhteys katkeaa välittömästi, joten ei enää muita eriä (edes SET NOEXEC ON) suoritetaan. Syy NOEXEC -lausekkeiden olemassaoloon on katettava tilanne, jossa suorittavalle käyttäjälle ei ole sysadmin / ALTER TRACE -oikeudet, joita tarvitaan kohtalokkaiden virheiden lisäämiseksi.

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *