sql >> Database teknologi >  >> Database Tools >> SSMS

Hvad er SQLCMD-tilstand i SQL Server Management Studio?

Jeg foretog noget mere research, så her er min forståelse af dette for at udvide det, der er blevet skrevet indtil videre:

Hvad er SQLCMD

SQLCMD.exe er et konsolværktøj inkluderet i installationen af ​​SQL Server 2005 og nyere. Du kan typisk finde det i en sti som c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Det er et simpelt scriptmiljø, der tillader automatisering af opgaver relateret til SQL server. For eksempel kan du skrive og udføre et script, der vil logge på en specifik forekomst af SQL Server, udføre scripts fra en given mappe på denne forbindelse og gemme outputtet i en specificeret fil.

Invoke-Sqlcmd cmdlet blev introduceret med SQL Server 2008 som et middel til at erstatte dette værktøj med en standardiseret, Powershell-baseret tilgang, der bevarer det meste af den originale syntaks og funktionalitet.

Hvad er SQLCMD-tilstand i SSMS

I SSMS, SQLCMD-tilstand er en script-udførelsestilstand, der simulerer sqlcmd.exe-miljøet og derfor accepterer nogle kommandoer, der ikke er en del af T-SQL-sproget. I modsætning til sqlcmd.exe , kontakter den databasen ved hjælp af SqlClient (på samme måde som SSMS), ikke ODBC dataudbyder, så i nogle aspekter kan den have en anden adfærd end sqlcmd.exe .

Udførelse af scripts i SQLCMD-tilstand gør det muligt at bruge kommandoer, der er typiske for sqlcmd.exe miljø. Der er dog ingen IntelliSense eller debugging-understøttelse for SQLCMD-tilstand, så det kan være besværligt at vedligeholde scripts, der blander ren T-SQL med SQLCMD-specifik kode. Derfor bør den kun bruges, når det er nødvendigt.

Eksempel på brug

Lad os antage, at en virksomhed har en navngivningskonvention for databaser, der inkluderer miljø i navnet, f.eks.:MyDb_Prod , MyDb_Test , MyDb_Dev . Denne konvention kan bruges til at minimere risikoen for fejl .

Når en udvikler skriver et T-SQL-script, skal det udføres i forskellige miljøer i implementerings-/testprocessen, hvilket ville kræve mange versioner af koden:

 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod

I stedet kan vi antage, at databasenavnet vil blive angivet som en SQLCMD-variabel i implementeringsprocessen og have nøjagtig den samme fil implementeret i alle miljøer:

 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]

(i dette simple eksempel kunne databasenavn udelades helt, men hvis du har krydsdatabasesammenføjninger, er det nødvendigt at bruge databasenavn)



  1. phpmyadmin ingen data modtaget for at importere fejl, hvordan rettes?

  2. Hvorfor har den seneste phpmyadmin droppet sql som eksportformat?

  3. problemer med at oprette forbindelse til MySql DB (PHP)

  4. phpmyadmin - standard til struktur i stedet for at gennemse