SQL Server ストアド プロシージャにパラメーターを渡す

この記事では、Visual FoxPro からSQL Server ストアド プロシージャにパラメーターを渡す例について説明します。

元の製品バージョン: Visual FoxPro
元の KB 番号: 247370

概要

SQLExec を使用してストアド プロシージャにパラメーターを渡すには、2 つの方法があります。 Visual FoxPro のすべてのバージョンで機能する 1 つの方法は、SQL コマンドを文字列変数としてビルドすることです。 この方法の利点は、文字列をチェックし、バックエンドに渡す SQL コマンドを正確に確認できることです。

もう 1 つの方法は、パラメーター化されたビューのように、疑問符が付いた Foxpro 変数を渡すことです。 Visual FoxPro バージョン 5.0 以降のバージョンでは、これにより、出力パラメーターとして返されるストアド プロシージャから値を取得できます。

詳細

次の手順を実行します。

  1. SQL Serverに 2 つのストアド プロシージャを作成します (正確な手順については、「オンラインブック」を参照してください)。 Mysp_ObjectListは SysObjects テーブルを受け取るだけで、テーブル内のすべてのレコードに対して渡す値を 1 回返します。 mysp_GetVersionでは、サーバーのバージョンを見つけるための通常の手順について少し詳しく説明します。 SELECT @@VERSIONは、通常、SQL Serverバージョンをカーソル内のレコードとして返します。 ここでは、その結果をストアド プロシージャの出力パラメーターに割り当てます。

    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. 上記の手順を作成したデータベースにリンクする、SPParmTest という DSN を ODBC Administrator に作成します。

  3. 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.