【发布时间】:2010-01-30 00:26:33
【问题描述】:
我的查询如下所示:
DECLARE Match_Cursor CURSOR
FOR
SELECT ID,UserKey,TypeCode
FROM [DB1].Table1 as t1
OPEN Match_Cursor
FETCH NEXT FROM Match_cursor INTO @ID,@UserKey,@TypeCode;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
INSERT INTO #TempTable
SELECT t2.Name, t2.Address, t2.Country, @UserKey, @TypeCode
FROM [DB1].[DBO].udf_TableFunction(@ID) as t2
where @typeCode = 142 AND t2.Country = 'US'
FETCH NEXT FROM Match_cursor INTO @ID,@UserKey,@TypeCode;
END
SELECT * FROM #TempTable
有没有人建议使用连接重写它?假设t1.ID 和t2.ID 之间存在外键关系。
【问题讨论】:
-
udf_TableFunction 返回什么?问题是它返回单行。它是否可以适应返回所有行(比如如果 ID 为 NULL),在这种情况下你可以加入它...
-
它返回一个行集合。如果传入null,则无法更改为返回所有行,但永远不会传递null。
-
需要看
udf_TableFunction的内容 -
如果 udf_tablefunction 所做的只是从表中返回 ID、名称、地址、国家,为什么不简单地引用基础表呢?我同意 OMG Ponies,在不知道函数在做什么的情况下推荐任何东西有点困难......
标签: sql-server sql-server-2005 cursor user-defined-functions