我们正在从 Oracle 迁移到 SQL Server,并且我正在从填充了 BULK COLLECT INTO 查询的表变量转换查询。我正在考虑使用游标(绝对可以接受其他建议),但是在处理它正在使用的查询的 Oracle 代码中Table_var.FIRST
.NEXT
和.LAST
. 这是一些关于如何使用这些的示例代码。似乎第一个/下一个/最后一个正在为表 var 的记录提供索引。
TYPE Pers_DOB_LastInitial IS RECORD (
Person_ID Person.Person_ID%TYPE,
DOB Person.Birthdate%TYPE,
LastInitial VARCHAR2(1)
);
TYPE Dup_Table IS TABLE OF Pers_DOB_LastInitial INDEX BY BINARY_INTEGER;
Dup_Tab Dup_Table;
以及使用这些类型的函数:
FUNCTION Last_In_Group( pStart NUMBER, pDOB Person.Birthdate%TYPE, pLastInitial VARCHAR2 )
RETURN NUMBER IS
vResult NUMBER;
BEGIN
IF pStart = Dup_Tab.LAST THEN
RETURN pStart;
END IF;
vResult := pStart;
FOR vIndex IN pStart .. Dup_Tab.LAST LOOP
IF Dup_Tab.EXISTS( vIndex ) THEN
IF Dup_Tab( vIndex ).DOB = pDOB AND Dup_Tab( vIndex ).LastInitial = pLastInitial THEN
vResult := vIndex;
ELSE
EXIT;
END IF;
END IF;
END LOOP;
RETURN vResult;
END Last_In_Group;
我不需要为我完成编码,只需要指出正确的方向。我正在考虑使用游标,但我唯一熟悉的只是从 T-SQL 中的游标中获取下一条记录,并想看看是否有等效的方法来引用游标(或临时表)的行索引)。
编辑:我刚刚发现了以下内容并正在调查它。绝对愿意接受有关这是否是一条好路径或者游标是否更好的提示。
http://www.sql-server-performance.com/2004/operations-no-cursors/2/
DECLARE @dupTab TABLE (
person_id numeric(8,0),
DOB date,
LastInitial char(1)
)
INSERT @dupTab
SELECT ...