Utilizzo del cmdlet Invoke-Sqlcmd
Invoke-Sqlcmd è un cmdlet di SQL Server che esegue script che contengono istruzioni dai linguaggi (Transact-SQL e XQuery) e comandi supportati dall'utilità sqlcmd.
Utilizzo di Invoke-Sqlcmd
Il cmdlet Invoke-Sqlcmd consente di eseguire file script sqlcmd in un ambiente Windows PowerShell. Molte operazioni consentite da sqlcmd possono essere eseguite anche utilizzando Invoke-Sqlcmd.
Di seguito viene riportato un esempio di chiamata a Invoke-Sqlcmd per l'esecuzione di una query semplice, simile alla specifica di sqlcmd con le opzioni -Q e -S:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Di seguito viene riportato un esempio di chiamata a Invoke-Sqlcmd, specifica di un file di input e inoltro tramite pipe dell'output in un file. Si tratta di un'operazione simile alla specifica di sqlcmd con le opzioni -i e -o:
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"
Di seguito viene riportato un esempio di utilizzo di una matrice Windows PowerShell per passare più variabili di scripting sqlcmd a Invoke-Sqlcmd. Per caratteri "$" che identificano le variabili di scripting sqlcmd nell'istruzione SELECT è stato utilizzato il carattere di escape PowerShell "`" (apice inverso):
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
Di seguito viene riportato un esempio dell'utilizzo del provider di SQL Server per Windows PowerShell per passare a un'istanza di Motore di database, nonché dell'utilizzo del cmdlet Get-Item di Windows PowerShell per recuperare un oggetto server SMO per l'istanza e passarlo a Invoke-Sqlcmd:
Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)
Il parametro -Query è un parametro basato sulla posizione e non deve essere denominato. Se la prima stringa che viene passata a Invoke-Sqlcmd è senza nome, viene trattata come il parametro -Query.
Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
Contesto del percorso in Invoke-Sqlcmd
Se non si utilizza il parametro -Database, il contesto del database per Invoke-Sqlcmd viene impostato dal percorso che è attivo al momento della chiamata di cmdlet.
Percorso |
Contesto del database |
---|---|
Inizia con un'unità diversa da SQLSERVER: |
Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale. |
SQLSERVER:\SQL |
Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale. |
SQLSERVER:\SQL\NomeComputer |
Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer specificato. |
SQLSERVER:\SQL\NomeComputer\NomeIstanza |
Il database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato. |
SQLSERVER:\SQL\NomeComputer\NomeIstanza\\Database |
Il database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato. |
SQLSERVER:\SQL\NomeComputer\NomeIstanza\\Database\NomeDatabase |
Il database specificato nell'istanza specificata nel computer specificato. Vale anche per i percorsi più lunghi, ad esempio un percorso che specifica il nodo Tabelle e Colonne all'interno di un database. |
Si supponga, ad esempio, che il database predefinito per l'account di Windows nell'istanza predefinita del computer locale sia master. I seguenti comandi restituirebbero master:
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
I seguenti comandi restituirebbero AdventureWorks2008R2:
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2008R2\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Invoke-Sqlcmd visualizza un avviso quando utilizza il contesto del database per il percorso. È possibile utilizzare il parametro -SuppressProviderContextWarning per disattivare il messaggio di avviso. Il parametro -IgnoreProviderContext può essere utilizzato per indicare a Invoke-Sqlcmd di utilizzare sempre il database predefinito per l'accesso.
Confronto tra Invoke-Sqlcmd e l'utilità sqlcmd
Invoke-Sqlcmd può essere utilizzato per eseguire molti degli script eseguibili tramite l'utilità sqlcmd. Tuttavia, Invoke-Sqlcmd viene eseguito in un ambiente Windows PowerShell, che è diverso dall'ambiente del prompt dei comandi in cui viene eseguito sqlcmd. Il comportamento di Invoke-Sqlcmd è stato modificato per l'utilizzo in un ambiente Windows PowerShell.
Non tutti i comandi sqlcmd sono implementati in Invoke-Sqlcmd. I comandi non implementati includono: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.
Invoke-Sqlcmd non inizializza l'ambiente o le variabili di scripting sqlcmd, quali SQLCMDDBNAME o SQLCMDWORKSTATION.
Invoke-Sqlcmd non visualizza messaggi come l'output di istruzioni PRINT, a meno che non venga specificato il parametro comune di Windows PowerShell -Verbose. Esempio:
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
Non tutti i parametri sqlcmd sono necessari in un ambiente PowerShell. Ad esempio, Windows PowerShell formatta tutto l'output dei cmdlet, pertanto i parametri sqlcmd che specificano le opzioni di formattazione non vengono implementati in Invoke-Sqlcmd. Nella tabella seguente viene mostrata la relazione tra i parametri Invoke-Sqlcmd e le opzioni sqlcmd:
Descrizione |
Opzione sqlcmd |
Parametro Invoke-Sqlcmd |
---|---|---|
Nome server e istanza. |
-S |
-ServerInstance |
Database iniziale da utilizzare. |
-d |
-Database |
Esegue la query specificata ed esce. |
-Q |
-Query |
ID di accesso per l'autenticazione di SQL Server. |
-U |
-Username |
Password per l'autenticazione di SQL Server. |
-P |
-Password |
Definizione della variabile. |
-v |
-Variable |
Intervallo di timeout della query. |
-t |
-QueryTimeout |
Arresta l'esecuzione in caso di errore |
-b |
-AbortOnError |
Connessione amministrativa dedicata. |
-A |
-DedicatedAdministratorConnection |
Disabilita i comandi interattivi, gli script di avvio e le variabili di ambiente. |
-X |
-DisableCommands |
Disabilita la sostituzione delle variabili. |
-x |
-DisableVariables |
Livello minimo di gravità da segnalare. |
-V |
-SeverityLevel |
Livello minimo di errore da segnalare. |
-m |
-ErrorLevel |
Intervallo di timeout di accesso. |
-l |
-ConnectionTimeout |
Nome host. |
-H |
-HbostName |
Modifica la password e chiude l'utilità. |
-Z |
-NewPassword |
File di input che contiene una query |
-i |
-InputFile |
Lunghezza massima dell'output di caratteri. |
-w |
-MaxCharLength |
Lunghezza massima dell'output binario. |
-w |
-MaxBinaryLength |
Stabilisce la connessione utilizzando la crittografia SSL. |
Nessun parametro |
-EncryptConnection |
Visualizza gli errori |
Nessun parametro |
-OutputSqlErrors |
Esegue l'output dei messaggi in stderr. |
-r |
Nessun parametro |
Utilizza le impostazioni locali del client |
-R |
Nessun parametro |
Esegue la query specificata e rimane in esecuzione. |
-q |
Nessun parametro |
Tabella codici da utilizzare per i dati di output. |
-f |
Nessun parametro |
Modifica una password e rimane in esecuzione |
-z |
Nessun parametro |
Dimensioni pacchetto |
-a |
Nessun parametro |
Separatore delle colonne |
-s |
Nessun parametro |
Controlla le intestazioni di output |
-h |
Nessun parametro |
Specifica i caratteri di controllo |
-k |
Nessun parametro |
Larghezza visualizzazione lunghezza fissa |
-Y |
Nessun parametro |
Larghezza visualizzazione lunghezza variabile |
-y |
Nessun parametro |
Echo input |
-e |
Nessun parametro |
Attiva gli identificatori tra virgolette |
-I |
Nessun parametro |
Rimuove gli spazi finali |
-W |
Nessun parametro |
Elenca le istanze |
-L |
Nessun parametro |
Imposta il formato dell'output come Unicode |
-u |
Nessun parametro |
Stampa statistiche |
-p |
Nessun parametro |
Fine comando |
-c |
Nessun parametro |
Stabilisce la connessione utilizzando l'autenticazione di Windows |
-E |
Nessun parametro |
Vedere anche