Bitte sehen Sie sich den folgenden SQL-Code an.kann diese Abfrage verbessert werden?
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
Die Funktion FGETBIGINTLIST akzeptiert ein Komma getrennt Wert als einen Parameter und gibt den Wert in Tabellenformat .. wie
OID
95
96
192
253
110
201
201
83
87
88
208
208
208
208
und Funktion fresolve_11 durch die FGETBIGINTLIST Bigint Daten zurückgegeben akzeptiert und gibt die Ausgabe in diesem Format zurück
OID sOID PartKey
-------------------- -------------------- -----------
95 95 6
Meine Forderung ist jeweils Daten durch den FGETBIGINTLIST zurück passieren fresolve_11 funktionieren und es soll eine Ergebnismenge wie diese
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
Meine Abfrage funktioniert perfekt und gibt das erwartete Ergebnis zurück. Aber ich suche nach besseren Alternativen, ohne While-Schleife und 2 Tabellenvariablen zu verwenden.
Vielen Dank im Voraus.
Prost
Ramesh Vel
danke Thorarin ... es ist fantastisch ... ich denke nie, dass ... du hast es nur in einer einzigen Aussage getan ... – RameshVel