0

以下のようなユーザー定義型があります。

CREATE TYPE [Integer_udt] AS  TABLE (
    [Id] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC));

次に、クエリから入力しました。

DECLARE @Ids [Integer_udt]
    INSERT INTO @Ids
        SELECT table1.Id 
        FROM table1 

次に、単一の ID を受け入れるストアド プロシージャに個々のパラメーターを渡す必要があります。

EXEC prc_complicated_calculation @Id

prc_complicated_calculation を変更できないと仮定します。それを呼び出す最良の方法は何ですか?

4

2 に答える 2

3

私の最初の答えは、単純なロジックとコード行の動的SQLです。

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';

SELECT @sql = @sql + N'EXEC prc_complicted_calculation ' 
    + RTRIM(Id) + ';'
    FROM @Ids;

EXEC sp_executesql @sql;

ループを使用してこれを行うこともできますが、(動的SQLにアレルギーがない限り)少しの利益でより多くの作業ができると思います。

DECLARE @i INT;
DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT Id FROM @Ids;

OPEN c;

FETCH NEXT FROM c INTO @i;

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC prc_complicated_calculation @i;

    FETCH NEXT FROM c INTO @i;
END

CLOSE c;
DEALLOCATE c;
于 2012-05-17T01:02:06.953 に答える
0

カスタム タイプを使用するには、それを使用するストアド プロシージャのタイプ引数を READONLY に設定する必要があります。

ストアド プロシージャを変更することはできないため、最善の策は、おそらくこれに関する Aaron の回答に従うことです。

于 2012-05-17T01:07:28.513 に答える