Condividi tramite


Invoke-Sqlcmd

Esegue uno script contenente istruzioni supportate dall'utilità SQLCMD di SQL Server.

Sintassi

Invoke-Sqlcmd
      [-ServerInstance <PSObject>]
      [-Database <String>]
      [-Encrypt <String>]
      [-EncryptConnection]
      [-Username <String>]
      [-AccessToken <String>]
      [-Password <String>]
      [-Credential <PSCredential>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ConnectionTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DedicatedAdministratorConnection]
      [-DisableVariables]
      [-DisableCommands]
      [-HostName <String>]
      [-ApplicationName <String>]
      [-ApplicationIntent <ApplicationIntent>]
      [-MultiSubnetFailover]
      [-FailoverPartner <String>]
      [-HostNameInCertificate <String>]
      [-TrustServerCertificate]
      [-NewPassword <String>]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-SuppressProviderContextWarning]
      [-IgnoreProviderContext]
      [-OutputAs <OutputType>]
      [-StatisticsVariable <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]
Invoke-Sqlcmd
      [-AccessToken <String>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DisableVariables]
      [-DisableCommands]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-OutputAs <OutputType>]
      -ConnectionString <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [-StatisticsVariable <String>]
      [-ProgressAction <ActionPreference>]
      [<CommonParameters>]

Descrizione

Il cmdlet Invoke-Sqlcmd esegue uno script contenente i linguaggi e i comandi supportati dall'utilità SQLCMD di SQL Server.

I comandi supportati sono Transact-SQL istruzioni e il subset della sintassi XQuery supportata dal motore di database.

Questo cmdlet accetta anche molti dei comandi supportati in modo nativo da SQLCMD, ad esempio GO e QUIT.

Questo cmdlet accetta anche le variabili di scripting di SQLCMD, ad esempio SQLCMDUSER. Per impostazione predefinita, questo cmdlet non imposta le variabili di scripting di SQLCMD.

Questo cmdlet non supporta l'uso di comandi correlati principalmente alla modifica interattiva degli script.

I comandi non supportati includono :!, :connect, :error, :out, :ed, :list, :listvar, :reset, :p erftrace e :serverlist.

Quando questo cmdlet viene eseguito, il primo set di risultati restituito dallo script viene visualizzato come tabella formattata.

Se i set di risultati successivi contengono elenchi di colonne diversi rispetto al primo, tali set di risultati non vengono visualizzati.

Se i set di risultati successivi dopo il primo set hanno lo stesso elenco di colonne, le relative righe vengono aggiunte alla tabella formattata contenente le righe restituite dal primo set di risultati.

È possibile visualizzare l'output dei messaggi di SQL Server, ad esempio quelli risultanti dall'istruzione SQL PRINT, specificando il parametro Verbose.

Esempio

Esempio 1: Connettersi a un'istanza denominata ed eseguire uno script

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

TimeOfQuery
-----------
9/21/2017 2:48:24 PM

Questo comando si connette a un'istanza denominata del motore di database SQL in un computer ed esegue uno script di base Transact-SQL.

Esempio 2: Richiamare i comandi in un file di script e salvare l'output in un file di testo

Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.

Questo comando legge un file contenente istruzioni Transact-SQL e comandi SQLCMD, esegue il file e scrive l'output in un altro file.

Il file di output può contenere informazioni proprietarie, pertanto è necessario proteggere i file di output con le autorizzazioni NTFS appropriate.

Esempio 3: Richiamare uno script e passare valori di variabile da una stringa

$StringArray = "MYVAR1='String1'", "MYVAR2='String2'"
Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray

Var1     Var2
----     ----
String1  String2

Questo comando usa una matrice di stringhe di caratteri come input per il parametro Variable.

La matrice definisce più variabili SQLCMD.

L'istruzione $ sign in the SELECT che identifica le variabili SQLCMD viene preceduta da un carattere di escape usando il carattere back-tick (') .

Esempio 4: Richiamare uno script e passare variabili dal motore di database SQL

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('MachineName') AS ComputerName" -ServerInstance (Get-Item .)

ComputerName
------------
MyComputer

Questo comando usa Set-Location per passare al percorso del provider SQL ServerWindows PowerShell per un'istanza del motore di database SQL.

Chiama quindi Get-Item per recuperare un oggetto SQL Management Object Server da usare come parametro ServerInstance di Invoke-Sqlcmd.

Esempio 5: Eseguire una query e visualizzare l'output dettagliato

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
Invoke-SqlCmd -Query "PRINT N'abc'" -Verbose
VERBOSE: abc

Questo comando usa il parametro Windows PowerShellVerbose per restituire l'output del messaggio del comando SQL PRINT.

Esempio 6: Richiamare un comando usando una stringa posizionale come input

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance\Databases\MyDatabase"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName"
WARNING: Using provider context. Server = MyComputer\MainInstance, Database = MyDatabase.

DatabaseName
------------
MyDatabase

Questo comando usa una stringa posizionale per fornire l'input al parametro Query.

Viene inoltre illustrato come Invoke-Sqlcmd usa il percorso corrente per impostare il contesto del database su MyDatabase.

Esempio 7: Acquisire dati in un oggetto DataSet

$DS = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  ID, Item FROM MyDB.dbo.MyTable" -As DataSet
$DS.Tables[0].Rows | %{ echo "{ $($_['ID']), $($_['Item']) }" }

{ 10, AAA }
{ 20, BBB }
{ 30, CCC }

Questo comando usa il parametro As DataSet per acquisire i dati in un oggetto .Net System.Data.DataSet e archivia il risultato nella variabile '$DS'. L'oggetto può essere utilizzato per un'ulteriore elaborazione.

Esempio 8: Ottenere set di colonne specifici

$Tables = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  Item, id FROM MyDatabase.dbo.MyTable; SELECT GETDATE() AS T" -As DataTables
$Tables[0].Rows | %{ echo $_.ID }
$Tables[1].Rows | %{ echo $_.T.DayOfWeek }

10
20
30

Monday

Il primo comando usa il parametro As DataTables per acquisire i dati in una raccolta di oggetti .Net System.Data.DataTable. Il comando ottiene due tabelle con set di colonne diversi.

Ogni tabella può essere elaborata singolarmente, in base al proprio schema.

Esempio 9: Ottenere il controllo completo di una connessione

Invoke-Sqlcmd -Query "SELECT COUNT(*) AS Count FROM MyTable" -ConnectionString "Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly"
Count
-----
127432

Questo comando consente di usare il parametro -ConnectionString per ottenere il controllo completo della connessione stabilita da questo cmdlet, anziché il Invoke-Sqlcmd per compilare la stringa di connessione in base ai parametri passati nella riga di comando.

Ciò è utile per le proprietà meno comuni che è possibile usare.

Esempio 10: Eseguire una stored procedure e acquisire gli errori SQL

$script_sp_with_errors = @'
CREATE PROCEDURE [dbo].[TestProcedure3]
AS 
BEGIN 
  CREATE TABLE [dbo].[TestTable] (col INT NOT NULL);
  INSERT INTO [dbo].[TestTable] VALUES (NULL); -- will cause an error
END
GO
'@

# Create a test database
Invoke-SqlCmd -ServerInstance MyServer -Query 'CREATE DATABASE TestDB'
# ... adds a stored procedure that has errors in it...
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query $script_sp_with_errors
# ... executes the SP and collected the errors
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query 'EXEC TestProcedure3' -OutputSqlErrors $true

Here's the output:
Invoke-SqlCmd : Cannot insert the value NULL into column 'col', table 'TestDB.dbo.TestTable'; column does not allow nulls. INSERT fails.
The statement has been terminated.
 Msg 515, Level 16, State 2, Procedure TestProcedure3, Line 5.
At line:1 char:1
...

Questo comando consente di usare il parametro -OutputSqlErrors per segnalare gli errori all'utente. Si noti che il messaggio di errore in questo caso fornisce informazioni aggiuntive, ad esempio il nome SP e il numero di riga in cui si è verificato l'errore.

Esempio 11: Connettersi al database SQL di Azure (o a Istanza gestita) usando un token di accesso

Import-Module SQLServer
Import-Module Az.Accounts -MinimumVersion 2.2.0

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

### Obtain the Access Token: this will bring up the login dialog
Connect-AzAccount
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

Esempio 12: Connettersi al database SQL di Azure (o a Istanza gestita) usando un'entità servizio

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

$clientid = "enter application id that corresponds to the Service Principal" # Do not confuse with its display name
$tenantid = "enter the tenant ID of the Service Principal"
$secret = "enter the secret associated with the Service Principal"

$request = Invoke-RestMethod -Method POST `
           -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
           -Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }`
           -ContentType "application/x-www-form-urlencoded"
$access_token = $request.access_token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

Esempio 13: Connettersi al database SQL di Azure (o a Istanza gestita) usando un'identità gestita assegnata dal sistema (SAMI)

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

Esempio 14: Connettersi al database SQL di Azure (o a Istanza gestita) usando un'identità gestita assegnata dall'utente (UAMI)

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

Connect-AzAccount -Identity -AccountId '<your-user-assigned-managed-identity-client-id>'
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token `
              -query 'select * from Table1'

Esempio 15: Connettersi a un gruppo di disponibilità configurato per il routing Read-Only usando -ApplicationIntent

# In the following example:
# - MT_2009250511 is a listener for an AG configured for Read-Only Routing (port 5555)
# - AGDB_2_1 is the DB in the AG
# - VLM00226138 is the primary replica configured to only allow ReadWrite connections 
# - VLM00226137 is the secondary replica
# 
Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox1" -ApplicationName "ReadWrite" -ApplicationIntent ReadWrite `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"

Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox2" -ApplicationName "ReadOnly" -ApplicationIntent ReadOnly `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"  

# When you run the 2 cmdlets above, the output is going to be something like this:  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox1 ReadWrite         VLM00226138  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox2 ReadOnly          VLM00226137

che indica che, a seconda del valore del parametro -ApplicationIntent, la connessione viene instradata a un server diverso nel gruppo di disponibilità. Per inciso, osservare gli usi dei parametri -ApplicationName e -HostName per distinguere visivamente i due risultati: si tratta di una tecnica comune che può essere usata per tracciare le connessioni e le relative finalità, oltre all'esempio -ApplicationIntent illustrato qui.

Esempio 16: Acquisire le statistiche di connessione tramite -StatisticsVariable parametro

Import-Module SQLServer
Invoke-Sqlcmd -ServerInstance localhost -StatisticsVariable stats `
              -Query 'CREATE TABLE #Table (ID int); INSERT INTO #Table VALUES(1), (2); INSERT INTO #Table VALUES(3); SELECT * FROM #Table'

Write-Host "Number of rows affected......: $($stats.IduRows)"
Write-Host "Number of insert statements..: $($stats.IduCount)"
Write-Host "Number of select statements..: $($stats.SelectCount)"
Write-Host "Total execution time.........: $($stats.ExecutionTime)ms"

# When you run the code fragment above, is going to be something like this:  
#
# Number of rows affected......: 3
# Number of insert statements..: 2
# Number of select statements..: 1
# Total execution time.........: 5ms

In questo esempio viene illustrato come usare il parametro -StatisticsVariable per acquisire informazioni sulla connessione, le istruzioni eseguite e il tempo di esecuzione durante l'esecuzione di alcuni T-SQL che crea una tabella temporanea, inserire un valore e infine eseguire una selezione per ottenere tutte le righe inserite.

Nota: quando la stessa query viene eseguita su più server ,ad esempio eseguendo il piping dei nomi dei server tramite il cmdlet , il StatisticsVariable acquisisce una matrice di statistiche, una per ogni connessione. I risultati possono quindi essere aggregati usando, ad esempio, ($stats.IduRows | Measure-Object -Sum).Sum.

Per altre informazioni sulle statistiche disponibili, vedere Statistiche provider per SQL Server.

Esempio 17: eseguire una query che decrittografa i dati recuperati dalle colonne crittografate usando Always Encrypted. Si supponga che la chiave master della colonna sia archiviata in un insieme di credenziali delle chiavi in Azure Key Vault.

# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount

# Obtain an access token for key vaults. 
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token

# Pass the token to the cmdlet, so that it can use it to authenticate to Azure when decrypting data protected with Always Encrypted.
$connString = 'Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly;Column Encryption Setting=Enabled'
Invoke-Sqlcmd -Query 'SELECT COUNT(*) AS Count FROM MyTable' -ConnectionString $connString -KeyVaultAccessToken $keyVaultAccessToken

Parametri

-AbortOnError

Indica che questo cmdlet arresta il comando di SQL Server e restituisce un livello di errore alla variabile ERRORLEVEL di Windows PowerShell se questo cmdlet rileva un errore.

Il livello di errore restituito è 1 se l'errore ha una gravità superiore a 10 e il livello di errore è 0 se l'errore ha una gravità pari o inferiore a 10.

Se viene specificato anche il parametro ErrorLevel, questo cmdlet restituisce 1 solo se la gravità del messaggio di errore è uguale o superiore al valore specificato per ErrorLevel.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-AccessToken

Token di accesso usato per eseguire l'autenticazione a SQL Server, come alternativa all'autenticazione utente/password o windows.

Può essere usato, ad esempio, per connettersi a SQL Azure DB e SQL Azure Managed Instance usando un Service Principal o un Managed Identity (vedere i riferimenti nella parte inferiore di questa pagina)

Negli scenari comuni, questo parametro viene ottenuto con qualcosa di simile a (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token (richiede il modulo Az.Account)

Non specificare UserName, Passwordo credenziali quando si usa questo parametro.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ApplicationIntent

Tipo di carico di lavoro dell'applicazione durante la connessione a un database in un gruppo di disponibilità di SQL Server.

I valori consentiti sono: ReadOnly e ReadWrite.

Tipo:ApplicationIntent
Valori accettati:ReadWrite, ReadOnly
Posizione:Named
Valore predefinito:ReadWrite
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ApplicationName

Nome dell'applicazione associata alla connessione.

Tipo:String
Posizione:Named
Valore predefinito:.NET SqlClient Data Provider
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ConnectionString

Specifica una stringa di connessione da connettere al server.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ConnectionTimeout

Specifica il numero di secondi in cui si verifica il timeout di questo cmdlet se non riesce a connettersi correttamente a un'istanza del motore di database. Il valore di timeout deve essere un valore intero compreso tra 0 e 65534. Se si specifica 0, i tentativi di connessione non si verifica il timeout.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Credential

Oggetto PSCredential i cui campi Nome utente e Password verranno usati per connettersi all'istanza di SQL.

Tipo:PSCredential
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Database

Specifica il nome di un database. Questo cmdlet si connette a questo database nell'istanza specificata nel parametro ServerInstance.

Se il parametro Database non viene specificato, il database utilizzato dipende dal fatto che il percorso corrente specifichi sia la cartella SQLSERVER:\SQL che il nome di un database. Se il percorso specifica sia la cartella SQL che il nome di un database, questo cmdlet si connette al database specificato nel percorso. Se il percorso non è basato sulla cartella SQL o il percorso non contiene un nome di database, questo cmdlet si connette al database predefinito per l'ID di accesso corrente. Se si specifica l'opzione del parametro IgnoreProviderContext, questo cmdlet non considera alcun database specificato nel percorso corrente e si connette al database definito come predefinito per l'ID di accesso corrente.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-DedicatedAdministratorConnection

Indica che questo cmdlet usa una connessione amministrativa dedicata per connettersi a un'istanza del motore di database.

L'applicazione livello dati viene usata dagli amministratori di sistema per azioni quali la risoluzione dei problemi di istanze che non accetteranno nuove connessioni standard.

L'istanza deve essere configurata per supportare l'applicazione livello dati.

Se l'applicazione livello dati non è abilitata, questo cmdlet segnala un errore e non verrà eseguito.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-DisableCommands

Indica che questo cmdlet disattiva alcune funzionalità di sqlcmd che potrebbero compromettere la sicurezza durante l'esecuzione in file batch.

Impedisce che le variabili di Windows PowerShell vengano passate allo script di Invoke-Sqlcmd.

Lo script di avvio specificato nella variabile di scripting SQLCMDINI non viene eseguito.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-DisableVariables

Indica che questo cmdlet ignora le variabili di scripting sqlcmd. Ciò è utile quando uno script contiene molte istruzioni INSERT che possono contenere stringhe con lo stesso formato delle variabili, ad esempio $(variable_name).

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Encrypt

Tipo di crittografia da usare per la connessione a SQL Server.

Questo valore esegue il mapping alla proprietà EncryptSqlConnectionEncryptOption sull'oggetto SqlConnection del driver Microsoft.Data.SqlClient.

Se non specificato, il valore predefinito è Mandatory.

Questo parametro è nuovo nella versione 22 del modulo. Per altri dettagli, vedere Strict Connection Encryption in collegamenti correlati.

Tipo:String
Valori accettati:Mandatory, Optional, Strict
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-EncryptConnection

Indica che questo cmdlet usa la crittografia SSL/TLS (Secure Sockets Layer) per la connessione all'istanza del motore di database specificato nel parametro ServerInstance.

A partire dalla versione 22 del modulo, questo parametro è deprecato. Le connessioni vengono crittografate per impostazione predefinita. Prendere in considerazione l'uso del nuovo parametro -Encrypt. Per altri dettagli, vedere Strict Connection Encryption in collegamenti correlati.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ErrorLevel

Specifica che questo cmdlet visualizza solo i messaggi di errore il cui livello di gravità è uguale o superiore al valore specificato. Tutti i messaggi di errore vengono visualizzati se questo parametro non è specificato o impostato su 0. I livelli di gravità degli errori del motore di database sono compresi tra 1 e 24.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-FailoverPartner

Nome o indirizzo del server partner a cui connettersi se il server primario è inattivo.

Tipo:String
Posizione:Named
Valore predefinito:""
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-HostName

Specifica un nome di workstation. Il nome della workstation viene segnalato dalla stored procedure di sistema sp_who e nella colonna nome host della vista del catalogo sys.processes. Se questo parametro non viene specificato, il valore predefinito è il nome del computer in cui viene eseguito Invoke-Sqlcmd. Questo parametro può essere usato per identificare sessioni di Invoke-Sqlcmd diverse.

Tipo:String
Alias:WorkstationID
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-HostNameInCertificate

Nome host da usare per convalidare il certificato TLS/SSL di SQL Server. È necessario passare questo parametro se l'istanza di SQL Server è abilitata per Forza crittografia e si vuole connettersi a un'istanza usando nome host/nome breve. Se questo parametro viene omesso, è necessario passare il nome di dominio completo (FQDN) a -ServerInstance per connettersi a un'istanza di SQL Server abilitata per Forza crittografia.

Questo parametro è nuovo nella versione 22 del modulo. Per altri dettagli, vedere Strict Connection Encryption in collegamenti correlati.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-IgnoreProviderContext

Indica che questo cmdlet ignora il contesto del database stabilito dal percorso SQLSERVER:\SQL corrente. Se il parametro Database non è specificato, questo cmdlet usa il database predefinito per l'ID di accesso corrente o l'account di Windows.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-IncludeSqlUserErrors

Indica che questo cmdlet restituisce errori di script utente SQL che altrimenti vengono ignorati per impostazione predefinita. Se questo parametro viene specificato, questo cmdlet corrisponde al comportamento predefinito dell'utilità sqlcmd.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-InputFile

Specifica un file da utilizzare come input della query per questo cmdlet. Il file può contenere istruzioni Transact-SQL, istruzioni XQuery e comandi sqlcmd e variabili di scripting. Specificare il percorso completo del file. È previsto che il file venga codificato con UTF-8.

È consigliabile eseguire script solo da origini attendibili. Assicurarsi che tutti gli script di input siano protetti con le autorizzazioni NTFS appropriate.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-KeyVaultAccessToken

Specifica un token di accesso per gli insiemi di credenziali delle chiavi in Azure Key Vault. Usare questo parametro se una colonna su cui eseguire query è protetta con Always Encrypted usando una chiave master della colonna archiviata in un insieme di credenziali delle chiavi in Azure Key Vault. In alternativa, è possibile eseguire l'autenticazione in Azure con Add-SqlAzureAuthenticationContext prima di chiamare questo cmdlet.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ManagedHsmAccessToken

Specifica un token di accesso per i moduli di protezione hardware gestiti in Azure Key Vault. Usare questo parametro se una colonna su cui eseguire query è protetta con Always Encrypted usando una chiave master della colonna archiviata in un modulo di protezione hardware gestito in Azure Key Vault. In alternativa, è possibile eseguire l'autenticazione in Azure con Add-SqlAzureAuthenticationContext prima di chiamare questo cmdlet.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-MaxBinaryLength

Specifica il numero massimo di byte restituiti per le colonne con tipi di dati stringa binaria, ad esempio binary e varbinary. Il valore predefinito è 1.024 byte.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-MaxCharLength

Specifica il numero massimo di caratteri restituiti per le colonne con tipi di dati Unicode o carattere, ad esempio char, nchar, varchar e nvarchar. Il valore predefinito è 4.000 caratteri.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-MultiSubnetFailover

Se l'applicazione si connette a un gruppo di disponibilità AlwaysOn in subnet diverse, il passaggio di questo parametro fornisce un rilevamento più rapido di e la connessione al server attivo (attualmente).

Nota: il passaggio di -MultiSubnetFailover non è necessario con .NET Framework 4.6.1 o versioni successive.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-NewPassword

Specifica una nuova password per un ID di accesso di autenticazione di SQL Server. Questo cmdlet modifica la password e quindi viene chiusa. È inoltre necessario specificare i parametri Nome utente e Password, con Password che specifica la password corrente per l'account di accesso.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-OutputAs

Specifica il tipo dei risultati ottenuti da questo cmdlet.

Se non si specifica un valore per questo parametro, il cmdlet imposta il valore su DataRows.

Tipo:OutputType
Alias:As
Valori accettati:DataSet, DataTables, DataRows
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-OutputSqlErrors

Indica che questo cmdlet visualizza i messaggi di errore nell'output Invoke-Sqlcmd.

Tipo:Boolean
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Password

Specifica la password per l'ID di accesso di autenticazione di SQL Server specificato nel parametro Username . Le password fanno distinzione tra maiuscole e minuscole. Quando possibile, usare l'autenticazione di Windows. Non usare una password vuota, se possibile usare una password complessa.

Se si specifica il parametro Password seguito dalla password, la password è visibile a chiunque possa visualizzare il monitor.

Se si codifica la password seguita dalla password in uno script .ps1, chiunque legge il file di script visualizzerà la password.

Assegnare le autorizzazioni NTFS appropriate al file per impedire ad altri utenti di leggere il file.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ProgressAction

Determina in che modo PowerShell risponde agli aggiornamenti dello stato generati da uno script, un cmdlet o un provider, ad esempio le barre di stato generate dal cmdlet Write-Progress. Il cmdlet Write-Progress crea barre di stato che mostrano lo stato di un comando.

Tipo:ActionPreference
Alias:proga
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Query

Specifica una o più query eseguite da questo cmdlet. Le query possono essere Transact-SQL o istruzioni XQuery o comandi sqlcmd. È possibile specificare più query separate da un punto e virgola. Non specificare il separatore SQLcmd GO. Escape di tutte le virgolette doppie incluse nella stringa. Prendere in considerazione l'uso di identificatori tra parentesi quadre, ad esempio [MyTable] anziché identificatori tra virgolette, ad esempio "MyTable".

Tipo:String
Posizione:0
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-QueryTimeout

Specifica il numero di secondi prima del timeout delle query. Se non viene specificato un valore di timeout, le query non eseguono il timeout. Il timeout deve essere un valore intero compreso tra 1 e 65535.

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ServerInstance

Specifica una stringa di caratteri o un oggetto SMO (SQL Server Management Objects) che specifica il nome di un'istanza del motore di database. Per le istanze predefinite, specificare solo il nome del computer MyComputer. Per le istanze denominate, usare il formato NomeComputer\NomeIstanza.

Tipo:PSObject
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-SeverityLevel

Specifica il limite inferiore per il livello di gravità del messaggio di errore restituito dalla variabile ERRORLEVEL di Windows PowerShell.

Questo cmdlet restituisce il livello di gravità più alto dai messaggi di errore generati dalle query eseguite, a condizione che la gravità sia uguale o superiore a quella specificata nel parametro SeverityLevel.

Se SeverityLevel non è specificato o impostato su 0, questo cmdlet restituisce 0 su ERRORLEVEL.

I livelli di gravità dei messaggi di errore del motore di database sono compresi tra 1 e 24.

Questo cmdlet non segnala i livelli di gravità per i messaggi informativi con gravità pari a 10

Tipo:Int32
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-StatisticsVariable

Specificare il nome di una variabile di PowerShell a cui verranno assegnate le statistiche di runtime di SQL Server quando viene eseguito il cmdlet.

L'uso comune per questo parametro consiste nell'acquisire la ExecutionTime (la quantità cumulativa di tempo (in millisecondi) impiegato dal provider per l'elaborazione del cmdlet) o IduRows (il numero totale di righe interessate dalle istruzioni INSERT, DELETE e UPDATE).

Per altre informazioni, vedere statistiche del provider per SQL Server.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-SuppressProviderContextWarning

Indica che questo cmdlet elimina l'avviso che questo cmdlet è stato usato nel contesto del database dall'impostazione del percorso SQLSERVER:\SQL corrente per stabilire il contesto del database per il cmdlet.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-TrustServerCertificate

Indica se il canale verrà crittografato durante il bypass della catena di certificati per convalidare l'attendibilità.

Questo parametro è nuovo nella versione 22 del modulo. Per altri dettagli, vedere Strict Connection Encryption in collegamenti correlati.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Username

Specifica l'ID di accesso per stabilire una connessione di autenticazione di SQL Server a un'istanza del motore di database.

La password deve essere specificata tramite il parametro Password.

Se nome utente e password non sono specificati, questo cmdlet tenta una connessione di autenticazione di Windows usando l'account di Windows che esegue la sessione di Windows PowerShell. Quando possibile, usare l'autenticazione di Windows.

Tipo:String
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Variable

Specifica un set di variabili di scripting sqlcmd da usare nello script sqlcmd e imposta un valore per le variabili.

Usare una matrice di Windows PowerShell per specificare più variabili e i relativi valori; in alternativa, usare un Hashtable in cui la chiave rappresenta il nome della variabile e il valore della variabile.

Quando si usa una matrice, i valori dei parametri vengono tagliati. Questo comportamento è stato mantenuto nella versione 22 del modulo per garantire la compatibilità con le versioni precedenti con v21. È consigliabile non basarsi su questo comportamento, che potrebbe cambiare in una versione principale futura del modulo.

Il parametro di tipo Hashtable è disponibile solo nella versione 22+ del modulo.

Tipo:PSObject
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

Input

System.Management.Automation.PSObject

Output

System.Object