0

単純な SELECT ステートメントを使用して結果セットを CSV 文字列として返すストアド プロシージャを作成したいと考えています。したがって、基本的な考え方は、ユーザー入力から sql ステートメントを取得し、EXEC(@stmt) を使用して実行し、カーソルを使用して結果セットをテキストに変換することです。ただし、SQLServer では次のことが許可されていません。

  • select * from storedprocedure(@sqlStmt)
  • EXEC(@sqlStmt)を使用したUDF

#tempTable EXEC(@sqlStmt) に挿入しようとしましたが、これは機能しません (エラー = "無効なオブジェクト名 #tempTable")。

私は立ち往生しています。この問題について少し説明していただけますか?

どうもありがとう

編集:

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

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

4

2 に答える 2

0

私が間違っていなければ、SELECT ステートメントを受け取り、オプションで CSV として結果を返すストアド プロシージャが必要です。

では、EXEC prExecute 'select * from tablea' を呼び出したいと思いますか? それはかなり東です:

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

しかし、ここでカーソルの必要性がわかりません。

于 2009-05-19T12:36:52.607 に答える
0

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

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

于 2009-04-24T16:51:22.707 に答える