Passar parâmetros para um procedimento armazenado SQL Server

Este artigo apresenta um exemplo de passar parâmetros para um procedimento armazenado SQL Server do Visual FoxPro.

Versão original do produto: Visual FoxPro
Número original do KB: 247370

Resumo

Há duas maneiras de passar parâmetros para um procedimento armazenado usando SQLExec. Uma maneira, que funciona em todas as versões do Visual FoxPro, é criar o comando SQL como uma variável de cadeia de caracteres. A vantagem desse método é que você pode marcar a cadeia de caracteres e ver exatamente qual comando SQL você está passando para o back-end.

A outra maneira é passar as variáveis Foxpro precedidas de pontos de interrogação, como em uma exibição parametrizada. No Visual FoxPro versão 5.0 e versões posteriores, isso permite obter valores do procedimento armazenado que estão sendo retornados como parâmetros de saída.

Mais informações

Siga estas etapas:

  1. Crie dois procedimentos armazenados no SQL Server (consulte Livros Online para obter as etapas exatas). Mysp_ObjectList simplesmente pega a tabela SysObjects e retorna o valor que você passa uma vez para cada registro na tabela. Em mysp_GetVersion, elaboramos um pouco sobre o procedimento normal para localizar a versão do servidor. SELECT @@VERSION normalmente retorna a versão SQL Server como um registro em um cursor. Aqui, atribuimos esse resultado a um parâmetro de saída do procedimento armazenado.

    CREATE PROCEDURE mysp_GetVersion @tcVersion Char(200) Output AS 
    SELECT @tcVersion = @@VERSION
    
    CREATE PROCEDURE mysp_ObjectList @tcParm1 CHAR(10) AS
    SELECT @tcParm1, name FROM sysobjects
    
  2. Crie um DSN chamado SPParmTest no Administrador do ODBC, que é vinculado ao banco de dados em que você criou os procedimentos acima.

  3. Execute o seguinte código no Visual FoxPro:

    *!* Error-checking is omitted for the purposes of this sample:
    *!* you should always check the return values from SQL Passthrough calls.
    lnConn = SQLCONNECT("SPParmTest")
    lcParm1 = "ReturnThis"
    lcParm2 = "Then This"*!* This is the first way, involving building a string 
    *!* containing the parameters.
    lcCommand = "exec mysp_ObjectList '" + lcParm1 + "'"
    =SQLEXEC(lnConn, lcCommand)
    BROWSE
    USE
    
    *!* This is the second way, passing the FoxPro variables directly to 
    *!* the SQL command. This will work in 3.0.
    lcCommand = "exec mysp_ObjectList ?lcParm2"
    =SQLEXEC(lnConn, lcCommand)
    BROWSE
    USE
    
    *!* To get a value back from a stored procedure, initialize the
    *!* output variable first. This won't work under 3.0.
    lcVersion = SPACE(200)
    lcCommand = "exec mysp_GetVersion ?@lcVersion" && Note the pass by reference.
    =SQLEXEC(lnConn, lcCommand)?lcVersion 
    
    =SQLDISCONNECT(lnConn) && clean up.