Kan jeg aktivere SQLCMD-modus fra et skript?

Er det noe sånt som et direktiv som jeg kan bruke i et skript for å tvinge SSMS til å aktivere / deaktivere SQLCMD-modus?

Svar

Som det er sagt, er det ingen måte.

Imidlertid er en ting vi gjør er å inkludere en rask sjekk i skriptoverskriften vår for å avgjøre om SQLCMD-modus er på (og avslutte skriptet hvis ikke):

: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 

Det er en grunn Alvorlighetsgrad 20 brukes, har den en tendens til å drepe forbindelsen umiddelbart, og forhindrer at flere skriptkoder kjører, selv om det er GO batchterminatorer senere i skriptet.

Severities 20-24 :

Angi systemproblemer og er fatale feil, som betyr at databasemotoroppgaven som kjører en setning eller batch ikke lenger kjører. Oppgaven registrerer informasjon om hva som skjedde og deretter avsluttes. I de fleste tilfeller applikasjonstilkoblingen til forekomsten av databasemotoren kan også avslutte . Hvis dette skjer, avhengig av problemet em, kan det hende at applikasjonen ikke kan koble til på nytt.

Feilmeldinger i dette området kan påvirke alle prosessene som får tilgang til data i samme database, og kan indikere at en database eller et objekt er skadet. Feilmeldinger med alvorlighetsnivå fra 19 til 24 skrives til feilloggen.

Kommentarer

  • For ssms ville de to første linjene være nok, og for SQL 2000 Query Analyzer fungerer det, men meldingen vises ikke.
  • Men ville ikke ' t skript bare fortsette å kjøre fra neste GO?
  • Som nevnt her , kan du også angi SET NOEXEC ON som et ekstra sikkerhetstiltak for å forhindre at noe annet i skriptet kjører.
  • @Dan Nolan: Jeg skjønner, på en eller annen måte savnet jeg poenget med 3. linje. Så hvis jeg forstår det riktig, er ' ingen løsning for å dekke SQLCMD-modus av. Den viser i hovedsak incorrect syntax near ':' på grunn av :setvar i begynnelsen …
  • @youcantryreachingme RAISERROR alvorlighetsgrad 20 (og over) betraktes av SQL som en fatal feil, noe som resulterer i at forbindelsen blir droppet umiddelbart, og derfor ikke flere batcher (ikke engang SET NOEXEC ON) utføres. Årsaken til at NOEXEC utsagnene er der, er for å dekke situasjonen der den utførende brukeren ikke har sysadmin / ALTER TRACE privilegier, som er nødvendige for å få fatale feil.

Svar

Nei

Men du kan alltid kjøre i SQLCMD-modus og ha T-SQL i det skjønt

For å gjøre et klart skille mellom SQLCMD-kommandoer og Transact-SQL, må alle SQLCMD-kommandoer være foran et kolon (:).

Kommentarer

  • Er dette fortsatt gyldig for SQL Server 2012/2014/2016?
  • @ hot2use: Ja, jeg ' har brukt det 2014/2016

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *