请看下面的 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 rowid=@NoOfRows
insert into @ResultTbl
select * from fresolve_11(@InOID)
set @NoOfRows = @NoOfRows - 1
end
SELECT * FROM @RET
SELECT * FROM @ResultTbl
函数FGETBIGITLIST接受逗号分隔的值作为参数,并以表格格式返回值.. 就像
OID
95
96
192
253
110
201
201
83
87
88
208
208
208
208
函数fresolve_11接受 FGETBIGITLIST 返回的 bigint 数据,并将以这种格式返回输出
OID sOID PartKey
-------------------- -------------------- -----------
95 95 6
我的要求是将 FGETBIGITLIST 返回的每个数据传递给函数 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 个表变量。
提前致谢。
干杯
拉梅什维尔