Compartilhar via


Parâmetros de comando

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Baixar o driver do OLE DB

Os parâmetros são marcados no texto do comando com o caractere de ponto de interrogação. Por exemplo, a seguinte instrução SQL é marcada para um único parâmetro de entrada:

{call SalesByCategory('Produce', ?)}  

Para melhorar o desempenho reduzindo o tráfego de rede, o OLE DB Driver for SQL Server não obtém automaticamente as informações de parâmetro, a menos que ICommandWithParameters::GetParameterInfo ou ICommandPrepare::Prepare seja chamado antes da execução de um comando. Isso significa que o Driver do OLE DB para SQL Server não faz automaticamente o seguinte:

  • Verifique a exatidão do tipo de dados especificado com ICommandWithParameters::SetParameterInfo.

  • Mapeie do DBTYPE especificado nas informações de associação do acessador para o tipo de dados correto do SQL Server do parâmetro.

Os aplicativos receberão erros possíveis ou perda de precisão com um desses métodos, se especificarem tipos de dados não compatíveis com o tipo de dados do SQL Server do parâmetro.

Para garantir que isso não aconteça, o aplicativo deve:

  • Garantir que pwszDataSourceType corresponda aos tipos de dados do SQL Server do parâmetro em caso de hard-coding de ICommandWithParameters::SetParameterInfo.

  • Garantir que o valor DBTYPE associado ao parâmetro seja do mesmo tipo do tipo de dados do SQL Server do parâmetro em caso de hard-coding de um acessador.

  • Codifique o aplicativo para chamar ICommandWithParameters::GetParameterInfo de forma que o provedor possa obter os tipos de dados do SQL Server dos parâmetros dinamicamente. Observe que isso causa uma viagem de ida e volta na rede adicional até o servidor.

Observação

O provedor não dá suporte à chamada a ICommandWithParameters::GetParameterInfo em nenhuma instrução UPDATE ou DELETE do SQL Server que contenha uma cláusula FROM; em qualquer instrução SQL que dependa de uma subconsulta que contenha parâmetros; em instruções SQL que contenham marcadores de parâmetro em expressões de uma comparação, semelhança ou predicado quantificado; ou em consultas nas quais um dos parâmetros é um parâmetro de uma função. Ao processar um lote de instruções SQL, o provedor também não dá suporte à chamada a ICommandWithParameters::GetParameterInfo em marcadores de parâmetro nas instruções após a primeira instrução no lote. Não são permitidos comentários (/* */) no comando Transact-SQL.

O Driver do OLE DB para SQL Server é compatível com parâmetros de entrada em comandos de instrução SQL. Nos comandos de chamada de procedimento, o Driver do OLE DB para SQL Server é compatível com parâmetros de entrada, de saída e de entrada/saída. Os valores de parâmetro de saída são retornados para o aplicativo na execução (apenas se não houver nenhum conjunto de linhas retornado) ou quando todos os conjuntos de linhas retornados são esgotados pelo aplicativo. Para garantir a validade dos valores retornados, use IMultipleResults para forçar o consumo do conjunto de linhas.

Os nomes dos parâmetros de procedimento armazenado não precisam ser especificados em uma estrutura DBPARAMBINDINFO. Use NULL para o valor do membro pwszName para indicar que o OLE DB Driver for SQL Server deve ignorar o nome do parâmetro e usar apenas o ordinal especificado no membro rgParamOrdinals de ICommandWithParameters::SetParameterInfo. Caso o texto do comando contenha parâmetros nomeados e sem-nome, todos os parâmetros sem-nome devem ser especificados antes de qualquer parâmetro nomeado.

Caso o nome de um parâmetro de procedimento armazenado seja especificado, o OLE DB Driver for SQL Server verificará o nome para garantir sua validade. O Driver do OLE DB para SQL Server retorna um erro ao receber um nome de parâmetro incorreto do consumidor.

Observação

Para expor o suporte a XML e à UDT (tipos definidos pelo usuário) do SQL Server, o OLE DB Driver for SQL Server implementa uma nova interface ISSCommandWithParameters.

Consulte Também

Comandos