Udělal jsem další průzkum, takže zde je moje chápání toho, abych rozšířil to, co bylo dosud napsáno:
Co je SQLCMD
SQLCMD.exe
je konzolová utilita, která je součástí instalace SQL Server 2005 a vyšší. Obvykle jej najdete v cestě jako c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE
.
Jedná se o jednoduché skriptovací prostředí, které umožňuje automatizaci úloh souvisejících s SQL serverem. Můžete například napsat a spustit skript, který se přihlásí ke konkrétní instanci SQL Serveru, spustí skripty z daného adresáře na tomto připojení a uloží výstup do určeného souboru.
Invoke-Sqlcmd
cmdlet byla představena s SQL Server 2008 jako prostředek k nahrazení tohoto nástroje standardizovaným přístupem založeným na Powershell, který zachovává většinu původní syntaxe a funkčnosti.
Co je režim SQLCMD v SSMS
V SSMS, režim SQLCMD je režim spouštění skriptu, který simuluje prostředí sqlcmd.exe, a proto přijímá některé příkazy, které nejsou součástí jazyka T-SQL. Na rozdíl od sqlcmd.exe
, kontaktuje databázi pomocí SqlClient (stejně jako SSMS), nikoli ODBC poskytovatel dat, takže v některých aspektech může mít jiné chování než sqlcmd.exe
.
Spouštění skriptů v režimu SQLCMD umožňuje používat příkazy typické pro sqlcmd.exe
životní prostředí. Neexistuje však žádná podpora IntelliSense nebo ladění pro režim SQLCMD, takže údržba skriptů, které kombinují čisté T-SQL s kódem specifickým pro SQLCMD, může být bolestná. Proto by se měl používat pouze tehdy, když je to nutné.
Příklad použití
Předpokládejme, že společnost má konvenci pojmenování pro databáze, které v názvu obsahují prostředí, např.:MyDb_Prod , MyDb_Test , MyDb_Vývoj . Tuto konvenci lze použít k minimalizaci možnosti chyb .
Když vývojář napíše skript T-SQL, bude muset být spuštěn v různých prostředích v procesu nasazení/testování, což by vyžadovalo mnoho verzí kódu:
SELECT *
FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod
Místo toho můžeme předpokládat, že název databáze bude poskytnut jako proměnná SQLCMD v procesu nasazení a bude mít přesně stejný soubor nasazený do všech prostředí:
-- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS
SELECT *
FROM [$(databaseName)].[dbo].[MyTable1]
(v tomto jednoduchém příkladu lze název databáze vynechat úplně, ale pokud máte propojení mezi databázemi, je nutné použít název databáze)