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

In SQL Server Management Studio che cos'è la modalità SQLCMD?

Ho fatto altre ricerche, quindi ecco la mia comprensione di questo per estendere ciò che è stato scritto finora:

Cos'è SQLCMD

SQLCMD.exe è un'utilità della console inclusa nell'installazione di SQL Server 2005 e versioni successive. In genere puoi trovarlo in un percorso come c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

È un semplice ambiente di scripting che consente l'automazione delle attività relative al server SQL. Ad esempio, puoi scrivere ed eseguire uno script che accederà a un'istanza specifica di SQL Server, eseguirà script da una determinata directory su questa connessione e memorizzerà l'output in un file specifico.

Invoke-Sqlcmd cmdlet è stato introdotto con SQL Server 2008 come mezzo per sostituire questo strumento con un approccio standardizzato basato su Powershell, preservando la maggior parte della sintassi e delle funzionalità originali.

Cos'è la modalità SQLCMD in SSMS

In SSMS, modalità SQLCMD è una modalità di esecuzione di script che simula l'ambiente sqlcmd.exe e quindi accetta alcuni comandi che non fanno parte del linguaggio T-SQL. A differenza di sqlcmd.exe , contatta il database utilizzando SqlClient (allo stesso modo di SSMS), non ODBC fornitore di dati, quindi in alcuni aspetti potrebbe avere un comportamento diverso da sqlcmd.exe .

L'esecuzione di script in modalità SQLCMD consente di utilizzare i comandi tipici di sqlcmd.exe ambiente. Tuttavia, non è disponibile il supporto di IntelliSense o di debug per la modalità SQLCMD, quindi mantenere gli script che combinano T-SQL pulito con codice specifico di SQLCMD può essere un problema. Pertanto, dovrebbe essere utilizzato solo quando è necessario.

Esempio di caso d'uso

Supponiamo che un'azienda abbia una convenzione di denominazione per i database che includono l'ambiente nel nome, ad esempio:MyDb_Prod , MyDb_Test , MyDb_Sviluppo . Questa convenzione può essere utilizzata per ridurre al minimo le possibilità di errori .

Quando uno sviluppatore scrive uno script T-SQL, dovrà essere eseguito in ambienti diversi nel processo di distribuzione/test, che richiederebbe molte versioni del codice:

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

Invece, possiamo presumere che il nome del database verrà fornito come una variabile SQLCMD nel processo di distribuzione e che lo stesso file verrà distribuito esattamente in tutti gli ambienti:

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

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

(in questo semplice esempio il nome del database potrebbe essere omesso del tutto, ma se hai join tra database, è necessario utilizzare il nome del database)