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:
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
Crie um DSN chamado SPParmTest no Administrador do ODBC, que é vinculado ao banco de dados em que você criou os procedimentos acima.
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.