Compartilhar via


Usando identificadores do SQL Server no PowerShell

Ao usar o provedor do SQL Server para Windows PowerShell com o Mecanismo de Banco de Dados, você deve fornecer os nomes do computador e da instância, mesmo para instâncias padrão.

O provedor usa os identificadores do SQL Server em caminhos do Windows PowerShell. Os identificadores do SQL Server podem conter caracteres que não são suportados pelos caminhos no Windows PowerShell. Você deve substituir esses caracteres ou usar codificação especial quando for usar os identificadores em caminhos do Windows PowerShell.

Nomes do computador

O primeiro nó após o SQLSERVER:\SQL é o nome do computador que está executando a instância do Mecanismo de Banco de Dados; por exemplo, SQLSERVER:\SQL\MyComputer. Se você está executando o Windows PowerShell no mesmo computador que a instância do Mecanismo de Banco de Dados, pode usar localhost ou (local) em vez do nome do computador. Scripts que usam localhost ou (local) podem ser executados em qualquer computador sem necessidade de alterações para refletir os nomes dos computadores diferentes. Por exemplo, este comando entrará para o banco de dados de exemplo AdventureWorks2008R2 na instância padrão no computador local:

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

Os caracteres de parêntese em (local) é tratado normalmente como comandos pelo Windows PowerShell. Você deve:

  • Incluir cadeias de caracteres de caminho entre aspas:

    Set-Location "SQLSERVER:\SQL\(local)\DEFAULT\Databases\AdventureWorks2008R2"
    
  • Retirar o parêntese usando o caractere de escape (`).

    Set-Location SQLSERVER:\SQL\`(local`)\DEFAULT\Databases\AdventureWorks2008R2
    
  • Codificar o parêntese usando sua representação hexadecimal.

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

Caracteres de escape e de codificação são discutidos em mais detalhe mais adiante neste tópico.

Você não pode usar um ponto (.) para especificar o computador local em scripts PowerShell. O ponto não é suportado, porque é interpretado como um comando pelo PowerShell.

Nomes de instância padrão

Você pode executar várias instâncias do programa executável do Mecanismo de Banco de Dados no mesmo computador. As instâncias do Mecanismo de Banco de Dados são identificadas pela combinação do nome do computador e um nome de instância, como MyComputer\MyInstance.

Cada computador pode ter uma instância padrão do Mecanismo de Banco de Dados. Você não especifica um nome para a instância padrão ao instalá-la. Ao especificar apenas um nome de computador em uma cadeia de caracteres de conexão, você estabelecerá conexão com a instância padrão nesse computador. Todas as outras instâncias no computador devem ser instâncias nomeadas. Você especifica o nome da instância durante a configuração e as cadeias de caracteres de conexão devem especificar o nome do computador e o nome da instância.

O provedor do SQL Server requer que o nome da instância sempre seja especificado. Para instâncias padrão, especifique o nome da instância como DEFAULT.

Identificadores do SQL Server em caminhos do Windows PowerShell

Os provedores Windows PowerShell expõem as hierarquias de dados usando uma estrutura de caminho semelhante àquela usada no sistema de arquivos do Windows. O provedor do SQL Server Windows PowerShell implementa caminhos para objetos do SQL Server. No Mecanismo de Banco de Dados, a unidade é definida como SQLSERVER:, a primeira pasta é definida como \SQL e os objetos de banco de dados são considerados como contêineres e itens. Este é o caminho para a tabela Vendor no esquema de Compras do banco de dados AdventureWorks2008R2 em uma instância padrão do Mecanismo de Banco de Dados:

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

Os identificadores do SQL Server são os nomes de objetos do SQL Server, tais como nomes de tabela ou coluna. Existem dois tipos de identificadores do SQL Server:

  • Os identificadores regulares estão limitados a um conjunto de caracteres que também são suportados em caminhos do Windows PowerShell. Esses nomes podem ser usados em caminhos do Windows PowerShell sem a necessidade de alterá-los.

  • Os identificadores delimitados podem usar caracteres que não são suportados em nomes de caminho do Windows PowerShell. Identificadores delimitados são chamados de identificadores entre colchetes quando estão entre colchetes, como ([IdentifierName]), e identificadores entre aspas quando estão entre aspas, como ("IdentifierName"). Se um identificador delimitado usa caracteres que não são suportados em caminhos do Windows PowerShell, os caracteres devem ser codificados ou substituídos antes de usar o identificador como um contêiner ou nome de item. A codificação aceita todos os caracteres. Alguns caracteres, como o caractere de dois-pontos (:), não pode ser substituído.

Codificando e decodificando identificadores

Os caracteres não suportados em nomes de caminho do Windows PowerShell podem ser representados, ou codificados, como o caractere "%" seguido pelo valor hexadecimal do padrão de bits que representa o caractere, como em "**%**xx". A codificação sempre pode ser usada para manipular caracteres não suportados em caminhos do Windows PowerShell.

O cmdlet Encode-SqlName usa um identificador do SQL Server como entrada. Ele produz uma cadeia de caracteres com todos os caracteres não suportados pela linguagem Windows PowerShell codificada com "%xx". O cmdlet Decode-SqlName usa um identificador codificado do SQL Server como entrada e retorna o identificador original. Por exemplo:

  • Este comando retorna a cadeia de caracteres "Table%3ATest":

    Encode-SqlName "Table:Test"
    
  • Este comando retorna "Table:Test":

    Decode-SqlName "Table%3ATest"
    

Ao especificar os identificadores delimitados nos cmdlets do Windows PowerShell, é possível fornecer os próprios valores de caractere codificado ou usar o Encode-SqlName para fornecê-los. Por exemplo, se você já tiver navegado até o esquema que contém a tabela [Table:Test], poderá usar cd para a tabela fornecendo a versão codificada do caractere ":".

Set-Location Table%3ATest

De maneira alternativa, você pode usar Encode-SqlName para criar um nome com suporte do Windows PowerShell:

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

Estes são os caracteres codificados pelo Encode-SqlName e decodificados pelo Decode-SqlName:

Caractere

\

/

:

%

<

>

*

?

[

]

|

Codificação hexadecimal

%5C

%2F

%3A

%25

%3C

%3E

%2A

%3F

%5B

%5D

%7C

Substituindo caracteres

O caractere de escape (`) do PowerShell pode ser usado freqüentemente para substituir caracteres que são permitidos nos identificadores delimitados do SQL Server, mas que não são suportados nos nomes de caminho do Windows PowerShell. Entretanto, alguns caracteres não podem ser substituídos. Por exemplo, no Windows PowerShell, não é possível substituir o caractere dois-pontos (:). Os identificadores que contém esse caractere devem ser codificados. A codificação é mais segura do que a substituição, pois os trabalhos de codificação aceitam todos os caracteres.

Este é um exemplo de substituição de um caractere #:

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

O caractere de escape (`) geralmente encontra-se no lado esquerdo do teclado, abaixo da tecla ESC.

Identificadores do SQL Server em cmdlets

Alguns cmdlets do SQL Server contêm um parâmetro que usa um identificador como entrada. Normalmente, os valores de parâmetro são fornecidos como constantes de cadeia de caracteres entre aspas ou em variáveis da cadeia de caracteres. Quando os identificadores são fornecidos como constantes de cadeia de caracteres ou em variáveis, não há conflitos com o conjunto de caracteres suportado pelo Windows PowerShell.