0

一時テーブルを作成するストアド プロシージャを作成しました。ここで、.NET を使用してクエリを実行できるようにする必要があります。だから私は次のようなものが必要になります:

SELECT * FROM storedProcedure() WHERE ...

ストアド プロシージャによって作成されるテーブルも動的であるため、スキーマは変更されます。SQL Server 2005 を使用しています。

返される必要があるのは動的テーブルであるため、関数を使用できません。事前にテーブルを定義する必要があると、関数が役に立たなくなります。

動的 SQL の助けを借りてグローバル一時テーブルを作成することになりました。動的グローバル一時テーブルを作成し、.NET 経由でアクセスすることができました。

4

2 に答える 2

1

リファレンスが示すように、次のようなものを使用します。

insert into @t(<columns here>)
    exec stored_procedure;

ただし、多くの場合、このようなストアド プロシージャはユーザー定義関数に置き換えることができます。これらは値を返すように定義されており、必要に応じて正確に使用できます。

select *
from dbo.udf_MyFunction();

もちろん、それぞれのアプローチには長所と短所があります。ストアド プロシージャ メソッドの欠点の 1 つは、そのようなストアド プロシージャをネストできないことです。関数アプローチの欠点の 1 つは、動的 SQL を使用できないことです。

于 2013-07-29T14:44:11.633 に答える
0

実際には、このようなストアドプロシージャから選択できます

select * 
from openrowset('SQLNCLI', 'Server=<your server here>;Database=<your database here>;Trusted_Connection=yes;','set fmtonly off exec <your procedure here>')

ただし、本番環境でこれを行うことはお勧めできません。ストアド プロシージャをユーザー定義関数に変更することを検討してください。

于 2013-07-29T14:44:48.637 に答える