Condividi tramite


Utilizzo di identificatori di SQL Server in PowerShell

Quando si utilizza il provider SQL Server per Windows PowerShell con il Motore di database, è necessario fornire il nome del computer e dell'istanza, anche per le istanze predefinite.

Il provider utilizza gli identificatori di SQL Server nei percorsi di Windows PowerShell. Gli identificatori di SQL Server possono contenere caratteri non supportati nei percorsi di Windows PowerShell. Per tali caratteri, è necessario utilizzare caratteri di escape oppure la codifica speciale quando vengono utilizzati gli identificatori nei percorsi di Windows PowerShell.

Nomi di computer

Il primo nodo che segue SQLSERVER:\SQL è il nome del computer che esegue l'istanza di Motore di database, ad esempio, SQLSERVER:\SQL\MyComputer. Se si esegue Windows PowerShell nello stesso computer dell'istanza del Motore di database, è possibile utilizzare localhost o (local) al posto del nome del computer. Gli script che utilizzano localhost o (local) possono essere eseguiti in qualsiasi computer senza che debbano essere modificati per riflettere i diversi nomi dei computer. Ad esempio, questo comando indirizzerà al database di esempio AdventureWorks2008R2 nell'istanza predefinita nel computer locale:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2008R2

I caratteri parentesi in (local) vengono in genere gestiti da Windows PowerShell come comandi. È necessario:

  • Racchiudere le stringhe del percorso tra virgolette:

    Set-Location "SQLSERVER:\SQL\(local)\DEFAULT\Databases\AdventureWorks2008R2"
    
  • Utilizzare caratteri di escape per la parentesi utilizzando il carattere apice inverso (').

    Set-Location SQLSERVER:\SQL\`(local`)\DEFAULT\Databases\AdventureWorks2008R2
    
  • Codificare le parentesi utilizzando la rappresentazione esadecimale.

    Set-Location SQLSERVER:\SQL\%28local%29\DEFAULT\Databases\AdventureWorks2008R2
    

L'utilizzo dei caratteri di escape e la codifica dei caratteri vengono discussi in dettaglio più avanti in questo argomento.

Non è possibile utilizzare il punto (.) per specificare il computer locale negli script di PowerShell. Il punto non è supportato perché viene interpretato da PowerShell come un comando.

Nomi istanze predefinite

È possibile eseguire più istanze del programma eseguibile Motore di database sullo stesso computer. Le istanze di Motore di database sono identificate dalla combinazione tra nome del computer e nome di un'istanza, ad esempio MyComputer\MyInstance.

Ciascun computer può disporre di un'istanza predefinita di Motore di database. Non viene specificato un nome per l'istanza predefinita quando viene installata. Specificando solo un nome del computer in una stringa di connessione si è connessi all'istanza predefinita nel computer. Tutte le altre istanze nel computer devono essere istanze denominate. Il nome dell'istanza viene specificato durante l'installazione e nelle stringhe di connessione è necessario specificare il nome del computer e il nome dell'istanza.

Il provider SQL Server richiede di specificare sempre un nome dell'istanza. Per le istanze predefinite, è necessario specificare un nome dell'istanza DEFAULT.

Identificatori di SQL Server nei percorsi di Windows PowerShell

I provider Windows PowerShell espongono le gerarchie di dati utilizzando una struttura di percorso simile a quella del file system di Windows. Il provider SQL Server implementa i percorsi degli oggetti di SQL Server. Per Motore di database l'unità è impostata su SQLSERVER: la prima cartella è impostata su |SQL e agli oggetti di database si fa riferimento come contenitori ed elementi. Di seguito è riportato il percorso della tabella Vendor nello schema Purchasing del database AdventureWorks2008R2 in un'istanza predefinita del Motore di database:

SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2008R2\Tables\Purchasing.Vendor

Gli identificatori di SQL Server sono i nomi degli oggetti di SQL Server, ad esempio nomi delle tabelle o delle colonne. Esistono due tipi di identificatori di SQL Server:

  • Gli identificatori regolari sono limitati a un set di caratteri supportati anche nei percorsi di Windows PowerShell. Questi nomi possono essere utilizzati nei percorsi di Windows PowerShell senza essere modificati.

  • Gli identificatori delimitati possono utilizzare caratteri non supportati nei nomi dei percorsi di Windows PowerShell. Gli identificatori delimitati sono chiamati identificatori tra parentesi se sono racchiusi tra parentesi quadre ([IdentifierName]) e identificatori tra virgolette se sono racchiusi tra virgolette doppie ("IdentifierName"). Se un identificatore delimitato utilizza caratteri non supportati nei percorsi di Windows PowerShell, i caratteri devono essere codificati o devono essere utilizzati caratteri di escape prima di utilizzare l'identificatore come nome di contenitore o di elemento. La codifica è supportata per tutti i caratteri. Per alcuni caratteri, come i due punti (:), non è possibile utilizzare caratteri di escape.

Codifica e decodifica di identificatori

I caratteri non supportati nei nomi dei percorsi di Windows PowerShell possono essere rappresentati o codificati come il carattere "%" seguito dal valore esadecimale dello schema di bit che rappresenta il carattere, come in "**%**xx." La codifica può sempre essere utilizzata per gestire i caratteri non supportati nei percorsi di Windows PowerShell.

Il cmdlet Encode-SqlName accetta come input un identificatore di SQL Server. Restituisce una stringa con tutti i caratteri non supportati dal linguaggio di Windows PowerShell codificati con "% xx". Il cmdlet Decode-SqlName accetta come input un identificatore di SQL Server codificato e restituisce l'identificatore originale. come illustrato nell'esempio seguente:

  • Tale comando restituisce la stringa "Table%3ATest":

    Encode-SqlName "Table:Test"
    
  • Questo comando restituisce "Table:Test":

    Decode-SqlName "Table%3ATest"
    

Quando si specificano identificatori delimitati nei cmdlet di Windows PowerShell, è possibile fornire i valori dei caratteri codificati o utilizzare Encode-SqlName per fornire i caratteri codificati. Ad esempio, se si è già eseguito l'accesso allo schema che contiene la tabella [Table:Test], è possibile eseguire il comando cd sulla tabella fornendo la versione codificata del carattere due punti (:):

Set-Location Table%3ATest

In alternativa, è possibile utilizzare Encode-SqlName per compilare un nome supportato da Windows PowerShell:

Set-Location (Encode-SqlName "Table:Test")

Caratteri codificati da Encode-SqlName e decodificati da Decode-SqlName:

Carattere

\

/

:

%

<

>

*

?

[

]

|

Codifica esadecimale

%5C

%2F

%3A

%25

%3C

%3E

%2A

%3F

%5B

%5D

%7C

Utilizzo di caratteri di escape

Spesso è possibile utilizzare l'apice inverso di Windows PowerShell (`) come carattere di escape per i caratteri consentiti negli identificatori delimitati di SQL Server, ma non per i nomi dei percorsi di Windows PowerShell. Tuttavia, alcuni caratteri non supportano l'utilizzo dei caratteri di escape. Ad esempio, non è possibile utilizzare i caratteri di escape per i due punti (:) in Windows PowerShell. Gli identificatori che contengono tale carattere devono essere codificati. La codifica è più affidabile dell'utilizzo dei caratteri di escape in quanto è supportata da tutti i caratteri.

Di seguito è riportato un esempio di utilizzo dei caratteri di escape in un carattere #:

cd SQLSERVER:\SQL\MyComputer\MyInstance\MyDatabase\MySchema\`#MyTempTable

L'apice inverso (`) è posto generalmente sul tasto superiore sinistro della tastiera, sotto il tasto ESC.

Identificatori di SLQ Server nei cmdlet

Alcuni cmdlet di SQL Server dispongono di un parametro che accetta un identificatore come input. I valori del parametro vengono generalmente forniti come costanti di stringa tra virgolette o nelle variabili di stringa. Quando gli identificatori vengono forniti come costanti di stringa o nelle variabili, non si verifica alcun conflitto con il set dei caratteri supportati da Windows PowerShell.