我们正在从Oracle迁移到SQL Server,并且正在使用填充了BULK COLLECT INTO查询的表变量转换查询。我正在考虑使用游标(绝对开放给其他建议),但是在处理查询的Oracle代码中,它使用Table_var.FIRST
.NEXT
和.LAST
。这里有一些示例代码如何使用它们。看起来,第一个/下一个/最后一个将索引赋予表的var记录。Oracle收集方法的T-SQL等价物(第一个,最后一个,下一个)?
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 ...
不,这是完全不同的东西。 – 2013-03-04 17:25:25
我已经更新了问题(希望)使它更清晰一点,并提供更好的示例代码。 – jinglesthula 2013-03-04 17:35:37