1

一時テーブルを使用して ID のリストを読み取り、更新を実行するストアド プロシージャがいくつかあります。これらのストアド プロシージャの 1 つに渡したい ID のリストを含むローカル クエリもあります。このようなことをする方法はありますか?

INSERT INTO #MyBackendTempTable
SELECT ID
FROM MyLocalQuery

VBA でレコードセットをループすることでこれを行うことができると思いますが、必要に応じて行いますが、これを行うセットごとの方法がある方がはるかに優れています。Access がパススルー クエリを実行できることは知っていますが、私の知る限りでは、サーバー上のオブジェクトに対してのみ機能します。私が知らない簡単な方法はありますか?

4

1 に答える 1

2

クエリが非常に単純で、ID のセット (1 列) しかない場合、フロント エンドでコンマ区切りのリストを作成し、それをバック エンドでストアド プロシージャに渡し、次のように分割できます。あなたのお気に入りの分割機構 (私はお気に入りがあります)。ストアド プロシージャは次のようになります (#temp テーブルが以前に同じスコープで作成されていると仮定します)。

CREATE PROCEDURE dbo.whatever
  @IDList VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;
  INSERT #MyBackendTempTable(ID) SELECT Item FROM dbo.Split(@IDList);
END
GO

フロント エンドでは、コンマ区切りのリストを作成して、その 1 つのパラメーターに渡します。

または、各ユーザーを一意に識別できると仮定して、spid、アプリケーションインスタンスに基づいたキーを持つ永続テーブルを使用できます。次に、次のようにします。

INSERT dbo.MyBackEndPermanentTable(Session, ID)
  SELECT 'SessionSomething', ID
  FROM MyLocalQuery;
于 2013-03-06T21:38:40.547 に答える