Compartilhar via


Parâmetros de comando do SQL Server Native Client

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

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 provedor OLE DB do SQL Server Native Client não deriva automaticamente informações de parâmetro, a menos que ICommandWithParameters::GetParameterInfo ou ICommandPrepare::P repare seja chamado antes de executar um comando. Isso significa que o provedor OLE DB do SQL Server Native Client não faz automaticamente:

  • 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 provedor OLE DB do SQL Server Native Client dá suporte a parâmetros de entrada em comandos de instrução SQL. Em comandos de chamada de procedimento, o provedor OLE DB do SQL Server Native Client dá suporte a parâmetros de entrada, saída e 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 provedor OLE DB do SQL Server Native Client 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.

Se o nome de um parâmetro de procedimento armazenado for especificado, o provedor OLE DB do SQL Server Native Client verificará o nome para garantir que ele seja válido. O provedor OLE DB do SQL Server Native Client retorna um erro quando recebe um nome de parâmetro incorreto do consumidor.

Observação

Para expor o suporte ao XML do SQL Server e aos UDT (tipos definidos pelo usuário), o provedor OLE DB do SQL Server Native Client implementa uma nova interface ISSCommandWithParameters .

Confira também

Comandos