Condividi tramite


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 .

Uso di Invoke-Sqlcmd

Il cmdlet Invoke-Sqlcmd consente di eseguire i file di script sqlcmd in un ambiente Windows PowerShell. Molte delle operazioni che è possibile eseguire con sqlcmd possono essere eseguite anche usando Invoke-Sqlcmd.

Questo è un esempio di chiamata Invoke-Sqlcmd per eseguire una query semplice, simile a quella di sqlcmd con le opzioni -Q e -S :

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Di seguito è riportato un esempio di chiamata a Invoke-Sqlcmd, che specifica un file di input e l'invio tramite pipe dell'output a un file 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"  

Questo è un esempio di uso di una matrice di Windows PowerShell per passare più variabili di scripting sqlcmd a Invoke-Sqlcmd. I caratteri "$" che identificano le variabili di scripting sqlcmd nell'istruzione SELECT sono stati escapati utilizzando il carattere di escape back-tick "`" di PowerShell:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

Questo è un esempio dell'uso del provider SQL Server per Windows PowerShell per passare a un'istanza del motore di database e quindi di usare il cmdlet Get-Item di Windows PowerShell per recuperare l'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 è posizionale e non deve essere denominato. Se la prima stringa passata a Invoke-Sqlcmd: è senza nome, viene considerata come parametro -Query.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Contesto del percorso in Invoke-Sqlcmd

Se non si usa il parametro -Database, il contesto del database per Invoke-Sqlcmd viene impostato dal percorso attivo quando viene chiamato il cmdlet.

Percorso Contesto del database
Inizia con un disco diverso da SQLSERVER: Database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale.
SQLSERVER:\SQL Database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale.
SQLSERVER:\SQL\ComputerName Database predefinito per l'ID di accesso nell'istanza predefinita nel computer specificato.
SQLSERVER:\SQL\ComputerName\InstanceName Database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases Database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName Database specificato nell'istanza specificata nel computer specificato. Questo 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 quindi 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;"  

Invoke-Sqlcmd mostra un avviso quando utilizza il contesto del database relativo al percorso. È possibile usare il parametro -SuppressProviderContextWarning per disattivare il messaggio di avviso. È possibile usare il parametro -IgnoreProviderContext per indicare a Invoke-Sqlcmd di usare sempre il database predefinito per l'account di accesso.

Confronto tra Invoke-Sqlcmd e utilità sqlcmd

Invoke-Sqlcmd può essere usato per eseguire molti degli script che possono essere eseguiti tramite l'utilità sqlcmd . Tuttavia, Invoke-Sqlcmd viene 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 funzionare in un ambiente Windows PowerShell.

Non tutti i comandi sqlcmd vengono implementati in Invoke-Sqlcmd. I comandi non implementati includono i seguenti: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, e :serverlist.

Invoke-Sqlcmd non inizializza l'ambiente sqlcmd o le variabili di scripting, ad esempio SQLCMDDBNAME o SQLCMDWORKSTATION.

Invoke-Sqlcmd non visualizza messaggi, ad esempio l'output delle istruzioni PRINT, a meno che non si specifichi il parametro comune di Windows PowerShell -Verbose . Per esempio:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

Non tutti i parametri sqlcmd sono necessari in un ambiente PowerShell. Ad esempio, Windows PowerShell formatta tutti gli 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 del server e dell'istanza. S- -ServerInstance
Database iniziale da utilizzare. -d -Banca dati
Eseguire la query specificata e uscire. -Q -Quesito
ID di accesso per l'autenticazione di SQL Server. -U -Nome utente
Password di autenticazione di SQL Server. -P -Parola d’ordine
Definizione di variabile. -v -Variabile
Intervallo di timeout della query. -t -QueryTimeout
Interrompere il funzionamento al verificarsi di un errore -b -AbortOnError
Connessione amministrativa dedicata. -Un -DedicatedAdministratorConnection
Disabilitare comandi interattivi, script di avvio e variabili di ambiente. -X -DisabilitaComandi
Disabilitare la sostituzione delle variabili. -x -DisableVariables
Livello di gravità minimo da segnalare. -V -SeverityLevel
Livello di errore minimo da segnalare. -m -ErrorLevel
Intervallo di timeout di connessione. -l -ConnectionTimeout
Nome host. -H -HostName
Modificare la password e uscire. -Z -NuovaPassword
File di input che contiene una query -i -InputFile
Lunghezza massima dell'output dei caratteri. -w -MaxCharLength
Lunghezza massima dell'output binario. -w -MaxBinaryLength
Connettersi usando la crittografia SSL. Nessun parametro -EncryptConnection
Visualizzare gli errori Nessun parametro -OutputSqlErrors
Inviare messaggi a stderr. -r Nessun parametro
Usare le impostazioni internazionali del client -R Nessun parametro
Eseguire la query specificata e rimanere in esecuzione. -q Nessun parametro
Tabella codici da usare per i dati di output. -f Nessun parametro
Modificare una password e continuare a funzionare -z Nessun parametro
Dimensioni del pacchetto -a Nessun parametro
Separatore delle colonne -s Nessun parametro
Controlla le intestazioni di output -h Nessun parametro
Specificare i caratteri di controllo -Okay Nessun parametro
Larghezza di visualizzazione a lunghezza fissa -Y Nessun parametro
Larghezza visualizzazione lunghezza variabile -y Nessun parametro
Input echo -e Nessun parametro
Abilitare gli identificatori tra virgolette -Io Nessun parametro
Rimuovere gli spazi finali -W Nessun parametro
Elenca le istanze -L Nessun parametro
Formatta l'output in Unicode -u Nessun parametro
Stampa statistiche -p Nessun parametro
Comando terminato -c Nessun parametro
Connettersi con l'autenticazione di Windows -E Nessun parametro

Vedere anche

Usare i cmdlet del motore di database
Utilità sqlcmd
Utilizzo dell'utilità sqlcmd