Partilhar via


Parâmetros da declaração

Um parâmetro é uma variável numa instrução SQL. Por exemplo, suponha que uma tabela de Peças tem colunas chamadas PartID, Description e Price. Para adicionar uma parte sem parámetros, seria necessário construir uma instrução SQL como:

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

Embora esta instrução insira uma nova ordem, não é uma boa solução para uma aplicação de entrada de ordem porque os valores a inserir não podem ser codificados fixamente na aplicação. Uma alternativa é construir a instrução SQL em tempo de execução, usando os valores a inserir. Isto também não é uma boa solução, devido à complexidade de construir instruções durante a execução. A melhor solução é substituir os elementos da cláusula VALUES por pontos de interrogação (?), ou marcadores de parâmetro:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

Os marcadores de parâmetros são então ligados a variáveis de aplicação. Para adicionar uma nova linha, a aplicação só tem de definir os valores das variáveis e executar a instrução. O driver recupera então os valores atuais das variáveis e envia-os para a fonte de dados. Se a instrução for executada várias vezes, a aplicação pode tornar o processo ainda mais eficiente ao preparar a declaração.

A instrução apresentada pode estar codificada diretamente numa aplicação de entrada de ordem para inserir uma nova linha. No entanto, os marcadores de parâmetros não se limitam a aplicações verticais. Para qualquer aplicação, facilitam a construção de instruções SQL em tempo de execução ao evitar conversões para e a partir de texto. Por exemplo, o ID da parte que acabou de ser mostrado é muito provavelmente armazenado na aplicação como um inteiro. Se a instrução SQL for construída sem marcadores de parâmetro, a aplicação deve converter o ID da parte em texto e a fonte de dados deve revertê-lo para inteiro. Ao usar um marcador de parâmetro, a aplicação pode enviar o ID da peça para o driver como um inteiro, que normalmente pode enviá-lo para a fonte de dados como um inteiro. Isto poupa duas conversões. Para valores de dados longos, isto é muito importante, porque as formas de texto desses valores frequentemente excedem o comprimento permitido de uma instrução SQL.

Os parâmetros são válidos apenas em certos locais nas instruções SQL. Por exemplo, não são permitidos na lista select (a lista de colunas a devolver por uma instrução SELECT ), nem são permitidos como ambos os operandos de um operador binário, como o sinal igual (=), porque seria impossível determinar o tipo de parâmetro. Geralmente, os parâmetros são válidos apenas em instruções de Linguagem de Manipulação de Dados (DML), e não em instruções de Linguagem de Definição de Dados (DDL). Para mais informações, consulte Marcadores de Parâmetro no Apêndice C: Gramática SQL.

Quando a instrução SQL invoca um procedimento, podem ser usados parâmetros nomeados. Os parâmetros nomeados são identificados pelos seus nomes, não pela sua posição na instrução SQL. Podem ser limitadas por uma chamada ao SQLBindParameter, mas o parâmetro é identificado pelo campo SQL_DESC_NAME do IPD (descritor do parâmetro de implementação), e não pelo argumento ParameterNumber do SQLBindParameter. Também podem ser associadas ao chamar SQLSetDescField ou SQLSetDescRec. Para mais informações sobre parâmetros nomeados, consulte Parâmetros de Ligação por Nome (Parâmetros Nomeados), mais adiante nesta secção. Para mais informações sobre descritores, veja Descritores.

Esta seção contém os seguintes tópicos.