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