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接受逗號分隔值作爲參數,並返回以表的格式值..就像
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個表變量。
在此先感謝。
乾杯
拉梅什VEL
謝謝Thorarin ...它的awsome ...我從來沒有想過abt ..你只是在一個單一的聲明... – RameshVel 2009-08-26 11:38:56