Condividi tramite


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