Compartilhar via


SQLPrepare

O driver ODBC do SQL Server Native Client cria um procedimento armazenado temporário de instruções SQL preparadas. Procedimentos armazenados são um modo eficiente de executar uma instrução várias vezes, mas criar procedimentos armazenados é mais caro que executar uma instrução simples. Como regra geral, considere usar SQLPrepare e SQLExecute se o aplicativo enviar uma instrução SQL mais de três vezes.

ObservaçãoObservação

O SQL Server tem suporte para o modelo de preparação/execução do ODBC. Essa discussão sobre o comportamento do SQLPrepare e do SQLExecute é aplicável somente a versões do SQL Server anteriores à 7.0.

Um procedimento armazenado temporário criado pelo SQLPrepare é denominado **#odbc#**useridentifier, onde useridentifier tem até seis caracteres do nome de usuário concatenados com oito dígitos que identificam o procedimento.

O SQLPrepare criará o procedimento armazenado temporário se todos os valores de parâmetro tiverem sido associados ou se a instrução SQL não contiver parâmetros. O SQLExecute cria o procedimento se nenhum dos parâmetros tiver sido associado quando SQLPrepare foi chamado.

O SQLPrepare pode criar procedimentos armazenados de forma mais eficiente que SQLExecute, e recomendamos usar o SQLBindParameter para associar variáveis de parâmetro antes de chamar SQLPrepare.

Se a instrução CREATE PROCEDURE usada para gerar um procedimento armazenado temporário retornar um erro, SQLPrepare ou SQLExecute enviarão a instrução para o SQL Server com a opção SET NOEXEC ou SET PARSEONLY habilitada (dependendo do tipo de instrução). O SQL Server verificará a sintaxe da instrução e retornará possíveis erros.

O SQLExecute pode retornar qualquer ODBC SQLSTATE e qualquer erro do SQL Server que possa ser retornado pelo SQLPrepare.

O driver ODBC do SQL Server Native Client ODBC cria um novo procedimento armazenado temporário se os valores InputOutputType, ParameterType, ColumnSize ou DecimalDigits forem alterados em chamadas para o SQLBindParameter em uma instrução preparada. Um novo procedimento armazenado temporário não será criado quando os parâmetros associados forem apontados para novos buffers na memória do cliente, o tamanho da memória do cliente for alterado ou o ponteiro para o valor de tamanho ou indicador do parâmetro for alterado.

Se uma conexão não puder criar um procedimento armazenado por qualquer motivo (como falta de permissão), o driver ODBC do SQL Server Native Client não usará um procedimento armazenado; em vez disso enviará a instrução SQL sempre que SQLExecute for chamado.

Por padrão, o driver ODBC do SQL Server Native Client descarta procedimentos armazenados temporários quando a conexão é quebrada (SQLDisconnect é chamado para a conexão). Se houver expectativa de a conexão permanecer aberta indefinidamente, isso pode apresentar problemas. O comportamento padrão pode ser alterado usando a opção de conexão específica do driver SQL_USE_PROCEDURE_FOR_PREPARE.

ObservaçãoObservação

Se SET NOCOUNT ON tiver sido executado, várias instruções incorporadas em um procedimento armazenado não criarão vários conjuntos de resultados, como deveriam. As contagens de linha geradas por instruções SQL dentro de um procedimento armazenado serão ignoradas pelo driver.

Consulte também

Conceitos

Outros recursos