Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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