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은 fresolve_11가 FGETBIGINTLIST 의해 반환 BIGINT 데이터를 받아들이는 단지
OID
95
96
192
253
110
201
201
83
87
88
208
208
208
208
및 함수처럼 .. 파라미터로서 콤마 분리 된 값을 받아 테이블 형식의 값을 반환 이 형식의 출력을 반환합니다.
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 개의 테이블 변수를 사용하지 않고 더 나은 대안을 찾고 있습니다.
미리 감사드립니다.
건배
라 메쉬 VEL
Thorarin에게 감사드립니다 ... 그 awsome ... 나는 결코 abt를 생각하지 않는다. .. 당신은 단지 성명서에서 그것을했다. .. – RameshVel