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 [email protected]
insert into @ResultTbl
select * from fresolve_11(@InOID)
set @NoOfRows = @NoOfRows - 1
end
SELECT * FROM @RET
SELECT * FROM @ResultTbl
機能FGETBIGINTLISTはFGETBIGINTLISTによって返さbigint型データを受け入れるだけ
OID
95
96
192
253
110
201
201
83
87
88
208
208
208
208
及び機能fresolve_11よう..パラメータとしてカンマ区切り値を受け入れ、表形式の値を返しますこの形式の出力を返します
OID sOID PartKey
-------------------- -------------------- -----------
95 95 6
私の要件は、fresolve_11を機能させるFGETBIGINTLISTによって返された各データを渡すことです、それは私のクエリが完璧に動作し、期待される結果を返します。この
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つのテーブル変数を使用せずに、より良い選択肢を探しています。
ありがとうございます。
乾杯
ラメシュ・ヴェル
ありがとうThorarin ...そのawsome ...私は決してabtを考えることはありません..あなたはただの文でそれをやった... – RameshVel