sql >> Databasteknik >  >> Database Tools >> SSMS

Vad är SQLCMD-läge i SQL Server Management Studio?

Jag gjorde lite mer forskning, så här är min förståelse av detta för att utöka det som har skrivits hittills:

Vad är SQLCMD

SQLCMD.exe är ett konsolverktyg som ingår i installationen av SQL Server 2005 och högre. Du kan vanligtvis hitta den i en sökväg som c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Det är en enkel skriptmiljö som tillåter automatisering av uppgifter relaterade till SQL-server. Du kan till exempel skriva och köra ett skript som kommer att logga in på en specifik instans av SQL Server, köra skript från en given katalog på denna anslutning och lagra utdata i en specificerad fil.

Invoke-Sqlcmd cmdlet introducerades med SQL Server 2008 som ett sätt att ersätta detta verktyg med ett standardiserat, Powershell-baserat tillvägagångssätt, som bevarar det mesta av den ursprungliga syntaxen och funktionerna.

Vad är SQLCMD-läge i SSMS

I SSMS, SQLCMD-läge är ett skriptkörningsläge som simulerar miljön sqlcmd.exe och därför accepterar vissa kommandon som inte är en del av T-SQL-språket. Till skillnad från sqlcmd.exe , kontaktar den databasen med SqlClient (på samma sätt som SSMS), inte ODBC dataleverantör, så i vissa aspekter kan den ha ett annat beteende än sqlcmd.exe .

Genom att köra skript i SQLCMD-läge kan du använda kommandon som är typiska för sqlcmd.exe miljö. Det finns dock inget IntelliSense- eller felsökningsstöd för SQLCMD-läge, så att underhålla skript som blandar ren T-SQL med SQLCMD-specifik kod kan vara jobbigt. Därför bör den endast användas när det är nödvändigt.

Exempel på användningsfall

Låt oss anta att ett företag har en namnkonvention för databaser som inkluderar miljö i namnet, t.ex.:MyDb_Prod , MyDb_Test , MyDb_Dev . Denna konvention kan användas för att minimera risken för misstag .

När en utvecklare skriver ett T-SQL-skript måste det köras i olika miljöer i distributions-/testprocessen, vilket skulle kräva många versioner av koden:

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

Istället kan vi anta att databasnamnet kommer att tillhandahållas som en SQLCMD-variabel i distributionsprocessen och har exakt samma fil distribuerad till alla miljöer:

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

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

(i detta enkla exempel kan databasnamn utelämnas helt, men om du har korsdatabaskopplingar är det nödvändigt att använda databasnamn)



  1. Kan inte ansluta - ogiltiga inställningar

  2. GeoArt med SAP HANA och DBeaver

  3. SQL Server Management Studio kommer inte att ansluta till SQL Server

  4. Okänd satstyp. (nära WITH vid position 0)