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

Wat is de SQLCMD-modus in SQL Server Management Studio?

Ik heb wat meer onderzoek gedaan, dus hier is mijn begrip hiervan om uit te breiden wat er tot nu toe is geschreven:

Wat is SQLCMD

SQLCMD.exe is een consolehulpprogramma dat is opgenomen in de installatie van SQL Server 2005 en hoger. Je kunt het meestal vinden in een pad zoals c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Het is een eenvoudige scriptomgeving die automatisering van taken met betrekking tot SQL-server mogelijk maakt. U kunt bijvoorbeeld een script schrijven en uitvoeren dat inlogt op een specifiek exemplaar van SQL Server, scripts uitvoeren vanuit een bepaalde map op deze verbinding en de uitvoer opslaan in een opgegeven bestand.

Invoke-Sqlcmd cmdlet is geïntroduceerd met SQL Server 2008 als een middel om deze tool te vervangen door een gestandaardiseerde, op Powershell gebaseerde aanpak, waarbij de meeste oorspronkelijke syntaxis en functionaliteit behouden blijven.

Wat is de SQLCMD-modus in SSMS

In SSMS, SQLCMD-modus is een scriptuitvoeringsmodus die de sqlcmd.exe-omgeving simuleert en daarom enkele opdrachten accepteert die geen deel uitmaken van de T-SQL-taal. In tegenstelling tot sqlcmd.exe , maakt het contact met de database via SqlClient (op dezelfde manier als SSMS), niet ODBC gegevensprovider, dus in sommige opzichten kan het een ander gedrag vertonen dan sqlcmd.exe .

Door scripts in SQLCMD-modus uit te voeren, kunt u opdrachten gebruiken die typisch zijn voor sqlcmd.exe omgeving. Er is echter geen IntelliSense- of foutopsporingsondersteuning voor de SQLCMD-modus, dus het kan lastig zijn om scripts te onderhouden die schone T-SQL combineren met SQLCMD-specifieke code. Daarom mag het alleen worden gebruikt als het nodig is.

Voorbeeld van gebruik

Laten we aannemen dat een bedrijf een naamgevingsconventie heeft voor databases die de omgeving in de naam opnemen, bijvoorbeeld:MyDb_Prod , MijnDb_Test , MijnDb_Dev . Deze conventie kan worden gebruikt om kans op fouten te minimaliseren .

Wanneer een ontwikkelaar een T-SQL-script schrijft, moet het in verschillende omgevingen worden uitgevoerd tijdens het implementatie-/testproces, waarvoor veel versies van de code nodig zijn:

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

In plaats daarvan kunnen we aannemen dat de databasenaam wordt verstrekt als een SQLCMD-variabele tijdens het implementatieproces en dat exact hetzelfde bestand wordt geïmplementeerd in alle omgevingen:

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

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

(in dit eenvoudige voorbeeld kan de databasenaam helemaal worden weggelaten, maar als u cross-database-joins hebt, is het gebruik van de databasenaam noodzakelijk)



  1. Hoe het ip-adres van de mySQL-server te achterhalen via phpmyadmin

  2. Hoe twee primaire sleutels in een tabel in te stellen (combineren)?

  3. Hoe KIE Workbench 6.1.0.Final (Drools Guvnor) Project te integreren met Java-toepassing

  4. Waarom is tabel CHARSET ingesteld op utf8mb4 en COLLATION op utf8mb4_unicode_520_ci