Condividi tramite


Utilizzo del 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.

Utilizzo di Invoke-Sqlcmd

Il cmdlet Invoke-Sqlcmd consente di eseguire file script sqlcmd in un ambiente Windows PowerShell. Molte operazioni consentite da sqlcmd possono essere eseguite anche utilizzando Invoke-Sqlcmd.

Di seguito viene riportato un esempio di chiamata a Invoke-Sqlcmd per l'esecuzione di una query semplice, simile alla specifica di sqlcmd con le opzioni -Q e -S:

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

Di seguito viene riportato un esempio di chiamata a Invoke-Sqlcmd, specifica di un file di input e inoltro tramite pipe dell'output in un file. Si tratta di un'operazione 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"

Di seguito viene riportato un esempio di utilizzo di una matrice Windows PowerShell per passare più variabili di scripting sqlcmd a Invoke-Sqlcmd. Per caratteri "$" che identificano le variabili di scripting sqlcmd nell'istruzione SELECT è stato utilizzato il carattere di escape PowerShell "`" (apice inverso):

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

Di seguito viene riportato un esempio dell'utilizzo del provider di SQL Server per Windows PowerShell per passare a un'istanza di Motore di database, nonché dell'utilizzo del cmdlet Get-Item di Windows PowerShell per recuperare un 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 è un parametro basato sulla posizione e non deve essere denominato. Se la prima stringa che viene passata a Invoke-Sqlcmd è senza nome, viene trattata come il 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.

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 master:

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

I seguenti comandi restituirebbero AdventureWorks2008R2:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2008R2\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

Invoke-Sqlcmd visualizza un avviso quando utilizza 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

Invoke-Sqlcmd può essere utilizzato per eseguire molti degli script eseguibili tramite l'utilità sqlcmd. Tuttavia, Invoke-Sqlcmd viene eseguito in un ambiente Windows PowerShell, che è diverso dall'ambiente del prompt dei comandi in cui viene eseguito sqlcmd. Il comportamento di Invoke-Sqlcmd è stato modificato per l'utilizzo in un ambiente Windows PowerShell.

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

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

Invoke-Sqlcmd non visualizza messaggi come l'output di istruzioni PRINT, a meno che non venga specificato il parametro comune di Windows PowerShell -Verbose. Esempio:

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

Non tutti i parametri sqlcmd sono necessari in un ambiente PowerShell. Ad esempio, Windows PowerShell formatta tutto l'output dei cmdlet, pertanto i parametri sqlcmd che specificano le opzioni di formattazione non vengono implementati in Invoke-Sqlcmd. Nella tabella seguente viene mostrata 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

ID di accesso per l'autenticazione di SQL Server.

-U

-Username

Password per l'autenticazione di SQL Server.

-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

-HbostName

Modifica la password e chiude l'utilità.

-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

Attiva gli identificatori tra virgolette

-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