0

単純なSELECT文を使用し、結果セットをCSV文字列として返すストアドプロシージャを作成します。基本的な考え方は、ユーザー入力からSQL文を取得し、EXEC(@stmt)を使用して実行し、カーソルを使用して結果セットをテキストに変換することです。しかし、SQLServerのは許可しないよう:クエリ文字列を受け取り、クエリの結果セットを返すUDFを作成する方法

  • は、EXECとUDF(@sqlStmt)

ので、私は#tempTable EXEC(@sqlStmtに挿入を試みた

  • (@sqlStmt)のStoredProcedureから選択* )、これは機能しません(error = "無効なオブジェクト名#tempTable")。

    私は立ち往生しています。この問題についていくつかの光を当ててください。

    感謝

    EDIT:

    が実際に出力(例えばCSV文字列)が重要ではありません。問題はEXECが返す結果セットにカーソルを割り当てる方法がわからないことです。入力ステートメントを知らなくても値を挿入する前に一時テーブルを作成するときに、SPとUDFはExec()で機能しません。

    私はOPENQUERYを考えましたが、パラメータとして変数を受け入れていません。

  • +1

    「実行方法」 - 立ち上がってすぐに歩き始める。スピードを上げ続けるとすぐに走っていくでしょう! ヒント:次回はより良いタイトルを選択してください! – Cerebrus

    +0

    動的に評価される任意のSQL文字列に基づいてCSVを返す関数は、実際にはすでに*書かれていますか? – Tomalak

    答えて

    0

    ストアドプロシージャに挿入する前に、ストアドプロシージャが返すものと同じ列でtempテーブルを作成する必要があります。

    しかし、CSVへの出力は、特にSQLに適したジョブのようには聞こえません。ストアドプロシージャを使用することに限定されていますか、または結果を取得してCSVに保存するためのスクリプトやプログラムを作成できますか?それはおそらく全体的に簡単なアプローチだろう。

    0

    もし私が間違っていないのであれば、SELECT文を受け入れ、結果を返すストアドプロシージャが必要です。オプションはCSVとして返されます。

    したがって、EXEC prExecute 'select * from tablea'はあなたが呼び出したいものですか? かなり東です:

    CREATE PROC prExecute (@sql varchar(2000)) 
    AS 
        EXEC (@sql); 
    GO 
    

    しかし、私はここに、カーソルの必要性を理解していません。

    関連する問題