Cmdlet Invoke-Sqlcmd
Invoke-Sqlcmd è un cmdlet SQL Server che esegue script che contengono istruzioni dai linguaggi (Transact-SQL e XQuery) e dai comandi supportati dall'utilità sqlcmd.
Utilizzo di Invoke-Sqlcmd
Il cmdlet Invoke-Sqlcmd consente di eseguire file di script sqlcmd in un ambiente Windows PowerShell. Molte delle operazioni consentite da sqlcmd possono essere eseguite anche tramite il cmdlet Invoke-Sqlcmd.
In questo esempio il cmdlet Invoke-Sqlcmd viene chiamato per eseguire una query semplice, analoga a sqlcmd con le opzioni -Q e -S :
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
In questo esempio il cmdlet Invoke-Sqlcmdviene chiamato specificando un file di input e inviando il pipe a un file, analogamente a quando si specifica sqlcmd con le opzioni -i e -o :
Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"
In questo esempio una matrice di Windows PowerShell viene usata per passare più variabili di scripting sqlcmd a Invoke-Sqlcmd. Per i caratteri "$" che identificano le variabili di scripting sqlcmd nell'istruzione SELECT è stato usato il carattere di escape di PowerShell "`" (apice inverso):
$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray
Questo è un esempio di utilizzo del provider di SQL Server per Windows PowerShell per passare a un'istanza del motore di database e quindi utilizzando il cmdlet get-item Windows PowerShell per recuperare l'oggetto server SMO per l'istanza e passandolo 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 passata a Invoke-Sqlcmdè senza nome, viene trattata come 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. |
Ad esempio, si supponga 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 comandi seguenti restituiscono AdventureWorks2012:
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Tramite Invoke-Sqlcmd viene visualizzato un avviso quando viene utilizzato 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
Il cmdletInvoke-Sqlcmd può essere usato per eseguire molti degli script eseguibili tramite l'utilità sqlcmd . Il cmdlet Invoke-Sqlcmd viene tuttavia eseguito in un ambiente Windows PowerShell diverso dall'ambiente del prompt dei comandi in cui viene eseguito sqlcmd . Il comportamento di Invoke-Sqlcmd è stato modificato per l'uso in un ambiente Windows PowerShell.
Non tutti i comandi sqlcmd sono implementati in Invoke-Sqlcmd. I comandi non implementati sono: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftracee :serverlist.
Il cmdletInvoke-Sqlcmd non inizializza l'ambiente o le variabili di scripting di sqlcmd , ad esempio SQLCMDDBNAME o SQLCMDWORKSTATION.
Il cmdletInvoke-Sqlcmd non visualizza i messaggi, ad esempio l'output di istruzioni PRINT, a meno che non venga specificato il parametro comune -Verbose di Windows PowerShell. Ad esempio:
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
In un ambiente PowerShell non sono necessari tutti i parametri sqlcmd . Windows PowerShell, ad esempio, formatta tutto l'output dei cmdlet, pertanto i parametri sqlcmd che specificano le opzioni di formattazione non vengono implementati in Invoke-Sqlcmd. La tabella seguente illustra 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 |
SQL Server ID di accesso dell'autenticazione. | -U | -Username |
SQL Server password di autenticazione. | -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 | -HostName |
Consente di modificare la password e di uscire. | -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 |
Abilita gli identificatori delimitati | -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
Utilizzo di cmdlet del motore di database
Utilità sqlcmd
Utilizzo dell'utilità sqlcmd