1

以下のSQLコードを見てください。

DECLARE @RET TABLE(OID BIGINT NOT NULL,rowid bigint identity);
DECLARE @ResultTbl TABLE(OID BIGINT,sOID BIGINT,partkey bigint);

DECLARE @PATOID as VARCHAR(4000)

SET @PATIENTOID= '95,96,192,253,110,201,201,83,87,88,208,208,208,208'
INSERT INTO @RET SELECT OID FROM dbo.FGETBIGINTLIST(@PATOID )


DECLARE @NoOfRows bigint
DECLARE @InOID bigint
select @NoOfRows =  max(rowid) from @RET

while (@NoOfRows >=1)
begin
     select @InOID = oid from @RET where rowid=@NoOfRows
    insert into @ResultTbl 
            select * from fresolve_11(@InOID)
    set @NoOfRows = @NoOfRows - 1

end

SELECT * FROM @RET 
SELECT * FROM @ResultTbl 

関数FGETBIGINTLISTは、コンマ区切りの値をパラメーターとして受け入れ、その値を表形式で返します。

OID 

95
96
192
253
110
201
201
83
87
88
208
208
208
208

関数fresolve_11は、FGETBIGINTLIST によって返された bigint データを受け入れ、この形式で出力を返します。

OID                  sOID                 PartKey
-------------------- -------------------- -----------
95                   95                   6

私の要件は、FGETBIGINTLIST によって返された各データを関数 fresolve_11 に渡すことであり、このような結果セットを返す必要があります。

OID                  sOID                 partkey
-------------------- -------------------- --------------------
208                  208                  29
208                  208                  29
208                  208                  29
208                  208                  29
88                   88                   29
87                   87                   28
83                   83                   24
201                  201                  22
201                  201                  22
110                  110                  21
253                  253                  14
192                  192                  13
96                   96                   7
95                   95                   6

私のクエリは完全に機能し、期待される結果を返します。しかし、while ループと 2 つのテーブル変数を使用せずに、より良い代替手段を探しています。

前もって感謝します。

乾杯

ラメシュ・ベル

4

1 に答える 1

5

自分で調べる必要がありましたが、次のとおりです。

SELECT result.*
FROM dbo.FGETBIGINTLIST(@PATOID) AS OIDs
OUTER APPLY dbo.fresolve_11(OIDs.OID) AS result

私のために働きます。SQL Server 2005 以降である必要があります。

APPLY (SQL Server 2005 バージョン)のMSDN ページを参照してください。

于 2009-08-26T11:31:21.677 に答える