Cmdlet Invoke-SqlcmdInvoke-Sqlcmd cmdlet

Invoke-Sqlcmd è un cmdlet di SQL ServerSQL Server che esegue script contenenti istruzioni CONTAIN provenienti dai linguaggi ( Transact-SQLTransact-SQL e XQuery) e dai comandi supportati dall'utilità sqlcmd .Invoke-Sqlcmd is a SQL ServerSQL Server cmdlet that runs scripts that CONTAIN statements from the languages ( Transact-SQLTransact-SQL and XQuery) and commands supported by the sqlcmd utility.

Utilizzo di Invoke-SqlcmdUsing Invoke-Sqlcmd

Il cmdlet Invoke-Sqlcmd consente di eseguire file di script sqlcmd in un ambiente Windows PowerShell.The Invoke-Sqlcmd cmdlet lets you run your sqlcmd script files in a Windows PowerShell environment. Molte delle operazioni consentite da sqlcmd possono essere eseguite anche tramite il cmdlet Invoke-Sqlcmd.Much of what you can do with sqlcmd can also be done using 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 :This is an example of calling Invoke-Sqlcmd to execute a simple query, similar to specifying sqlcmd with the -Q and -S options:

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 :This is an example of calling Invoke-Sqlcmd, specifying an input file and piping the output to a file This is similar to specifying sqlcmd with the -i and -o options:

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.This is an example of using a Windows PowerShell array to pass multiple sqlcmd scripting variables to 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):The "$" characters identifying the sqlcmd scripting variables in the SELECT statement have been escaped by using the PowerShell back-tick "`" escape character:

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

In questo esempio il provider SQL ServerSQL Server per Windows PowerShell viene usato per passare a un'istanza del Motore di databaseDatabase Engine, quindi viene usato il cmdlet Get-Item di Windows PowerShell per recuperare un oggetto server SMO per l'istanza e passarlo a Invoke-Sqlcmd:This is an example of using the SQL ServerSQL Server provider for Windows PowerShell to navigate to an instance of the Motore di databaseDatabase Engine, and then using the Windows PowerShell Get-Item cmdlet to retrieve the SMO Server object for the instance and passing it to 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.The -Query parameter is positional and does not have to be named. Se la prima stringa passata a Invoke-Sqlcmdè senza nome, viene trattata come parametro -Query.If the first string that is passed to Invoke-Sqlcmd: is unnamed, it is treated as the -Query parameter.

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

Contesto del percorso in Invoke-SqlcmdPath Context 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.If you do not use the -Database parameter, the database context for Invoke-Sqlcmd is set by the path that is active when the cmdlet is called.

PercorsoPath Contesto del databaseDatabase Context
Inizia con un'unità diversa da SQLSERVER:Starts with a drive other than SQLSERVER: Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale.The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQLSQLSERVER:\SQL Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer locale.The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQL\NomeComputerSQLSERVER:\SQL\ComputerName Il database predefinito per l'ID di accesso nell'istanza predefinita nel computer specificato.The default database for the login ID in the default instance on the specified computer.
SQLSERVER:\SQL\NomeComputer\NomeIstanzaSQLSERVER:\SQL\ComputerName\InstanceName Il database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato.The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\NomeComputer\NomeIstanza\DatabaseSQLSERVER:\SQL\ComputerName\InstanceName\Databases Il database predefinito per l'ID di accesso nell'istanza specificata nel computer specificato.The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\NomeComputer\NomeIstanza\Database\NomeDatabaseSQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName Il database specificato nell'istanza specificata nel computer specificato.The specified database in the specified instance on the specified computer. Vale anche per i percorsi più lunghi, ad esempio un percorso che specifica il nodo Tabelle e Colonne all'interno di un database.This also applies to longer paths, such as a path that specifies the Tables and Columns node within a database.

Ad esempio, si supponga che il database predefinito per l'account di Windows nell'istanza predefinita del computer locale sia master.For example, assume that the default database for your Windows account in the default instance of the local computer is master. I seguenti comandi restituirebbero master:Then, the following commands would return master:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

I seguenti comandi restituirebbero AdventureWorks2012AdventureWorks2012:The following commands would return AdventureWorks2012AdventureWorks2012:

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.Invoke-Sqlcmd provides a warning when it uses the path database context. È possibile utilizzare il parametro -SuppressProviderContextWarning per disattivare il messaggio di avviso.You can use the -SuppressProviderContextWarning parameter to turn off the warning message. Il parametro -IgnoreProviderContext può essere utilizzato per indicare a Invoke-Sqlcmd di utilizzare sempre il database predefinito per l'accesso.You can use the -IgnoreProviderContext parameter to tell Invoke-Sqlcmd to always use the default database for the login.

Confronto tra Invoke-Sqlcmd e l'utilità sqlcmdComparing Invoke-Sqlcmd and the sqlcmd Utility

Il cmdletInvoke-Sqlcmd può essere usato per eseguire molti degli script eseguibili tramite l'utilità sqlcmd .Invoke-Sqlcmd can be used to run many of the scripts that can be run using the sqlcmd utility. Il cmdlet Invoke-Sqlcmd viene tuttavia eseguito in un ambiente Windows PowerShell diverso dall'ambiente del prompt dei comandi in cui viene eseguito sqlcmd .However, Invoke-Sqlcmd runs in a Windows PowerShell environment which is different than the command prompt environment that sqlcmd is run in. Il comportamento di Invoke-Sqlcmd è stato modificato per l'uso in un ambiente Windows PowerShell.The behavior of Invoke-Sqlcmd has been modified to work in a Windows PowerShell environment.

Non tutti i comandi sqlcmd sono implementati in Invoke-Sqlcmd.Not all of the sqlcmd commands are implemented in Invoke-Sqlcmd. I comandi non implementati sono: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftracee :serverlist.Commands that are not implemented include the following: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, and :serverlist.

Il cmdletInvoke-Sqlcmd non inizializza l'ambiente o le variabili di scripting di sqlcmd , ad esempio SQLCMDDBNAME o SQLCMDWORKSTATION.Invoke-Sqlcmd does not initialize the sqlcmd environment or scripting variables such as SQLCMDDBNAME or 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.Invoke-Sqlcmd does not display messages, such as the output of PRINT statements, unless you specify the Windows PowerShell -Verbose common parameter. Esempio:For example:

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

In un ambiente PowerShell non sono necessari tutti i parametri sqlcmd .Not all of the sqlcmd parameters are needed in a PowerShell environment. 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.For example, Windows PowerShell formats all output from cmdlets, so the sqlcmd parameters specifying formatting options are not implemented in Invoke-Sqlcmd. Nella tabella seguente viene specificata la relazione tra i parametri di Invoke-Sqlcmd e le opzioni sqlcmd :The follwoing table shows the relationship between the Invoke-Sqlcmd parameters and sqlcmd options:

DescrizioneDescription Opzione sqlcmdsqlcmd option Parametro Invoke-SqlcmdInvoke-Sqlcmd parameter
Nome server e istanza.Server and instance name. -S-S -ServerInstance-ServerInstance
Database iniziale da utilizzare.The initial database to use. -d-d -Database-Database
Esegue la query specificata ed esce.Run the specified query and exit. -Q-Q -Query-Query
SQL ServerSQL Server . Authentication login ID. -U-U -Username-Username
SQL ServerSQL Server . Authentication password. -P-P -Password-Password
Definizione della variabile.Variable definition. -v-v -Variable-Variable
Intervallo di timeout della query.Query timeout interval. -t-t -QueryTimeout-QueryTimeout
Arresta l'esecuzione in caso di erroreStop running on an error -b-b -AbortOnError-AbortOnError
Connessione amministrativa dedicata.Dedicated Administrator Connection. -A-A -DedicatedAdministratorConnection-DedicatedAdministratorConnection
Disabilita i comandi interattivi, gli script di avvio e le variabili di ambiente.Disable interactive commands, startup script, and environment variables. -X-X -DisableCommands-DisableCommands
Disabilita la sostituzione delle variabili.Disable variable substitution. -X-x -DisableVariables-DisableVariables
Livello minimo di gravità da segnalare.Minimum severity level to report. -v-V -SeverityLevel-SeverityLevel
Livello minimo di errore da segnalare.Minimum error level to report. -m-m -ErrorLevel-ErrorLevel
Intervallo di timeout di accesso.Login timeout interval. -l-l -ConnectionTimeout-ConnectionTimeout
Nome host.Hostname. -H-H -HostName-HostName
Consente di modificare la password e di uscire.Change password and exit. -Z-Z -NewPassword-NewPassword
File di input che contiene una query.Input file containing a query -i-i -InputFile-InputFile
Lunghezza massima dell'output di caratteri.Maximum length of character output. -w-w -MaxCharLength-MaxCharLength
Lunghezza massima dell'output binario.Maximum length of binary output. -w-w -MaxBinaryLength-MaxBinaryLength
Stabilisce la connessione utilizzando la crittografia SSL.Connect using SSL encryption. Nessun parametroNo parameter -EncryptConnection-EncryptConnection
Visualizza gli erroriDisplay errors Nessun parametroNo parameter -OutputSqlErrors: richiede un parametro booleano $true o $false-OutputSqlErrors: requires a boolean parameter $true or $false
Esegue l'output dei messaggi in stderr.Output messages to stderr. -r-r Nessun parametroNo parameter
Utilizza le impostazioni locali del clientUse client's regional settings -r-R Nessun parametroNo parameter
Esegue la query specificata e rimane in esecuzione.Run the specified query and remain running. -Q-q Nessun parametroNo parameter
Tabella codici da utilizzare per i dati di output.Code page to use for output data. -f-f Nessun parametroNo parameter
Modifica una password e rimane in esecuzioneChange a password and remain running -Z-z Nessun parametroNo parameter
Dimensioni pacchettoPacket size -A-a Nessun parametroNo parameter
Separatore delle colonneColumn separator -S-s Nessun parametroNo parameter
Controlla le intestazioni di outputControl output headers -H-h Nessun parametroNo parameter
Specifica i caratteri di controlloSpecify control characters -k-k Nessun parametroNo parameter
Larghezza visualizzazione lunghezza fissaFixed length display width -Y-Y Nessun parametroNo parameter
Larghezza visualizzazione lunghezza variabileVariable length display width -Y-y Nessun parametroNo parameter
Echo inputEcho input -e-e Nessun parametroNo parameter
Abilita gli identificatori delimitatiEnable quoted identifiers -i-I Nessun parametroNo parameter
Rimuove gli spazi finaliRemove trailing spaces -w-W Nessun parametroNo parameter
Elenca le istanzeList instances -l-L Nessun parametroNo parameter
Imposta il formato dell'output come UnicodeFormat output as Unicode -U-u Nessun parametroNo parameter
Stampa statistichePrint statistics -P-p Nessun parametroNo parameter
Fine comandoCommand end -c-c Nessun parametroNo parameter
Stabilisce la connessione utilizzando l'autenticazione di WindowsConnect using Windows Authentication -e-E Nessun parametroNo parameter

Vedere ancheSee also

Utilizzo di cmdlet del motore di database Use the Database Engine cmdlets
Utilità sqlcmd sqlcmd Utility
Utilizzo dell'utilità sqlcmdUse the sqlcmd Utility