sql - 在 T-SQL/SQL Server 2000 中,引用结果集中的特定行

标签 sql database tsql sql-server-2000

我想引用#temptable 的第n 行(在下面的第二个SQL 注释处)。什么表达式可以让我这样做?

DECLARE @counter INT
SET @counter = 0
WHILE (@counter<count(#temptable))
--#temptable has one column and 0 or more rows
BEGIN
DECLARE @variab INT
EXEC @variab = get_next_ticket 3906, 'n', 1

INSERT INTO Student_Course_List
                SELECT  @student_id,
                -- nth result set row in #temptable, where n is @count+1
                @variab

SET @counter = @counter +1
END

光标(这行得通吗?):

for record in (select id from #temptable) loop 
--For statements, use record.id 
end loop;

最佳答案

通常在 SQL Server 这样的关系数据库中,您更喜欢进行集合操作。因此,即使是非常复杂的查询,最好也只使用 INSERT INTO tbl SOMECOMPLEXQUERY。这比行处理要好得多。在复杂的系统中,使用游标应该是比较少见的。

在您的情况下,get_next_ticket 过程似乎执行了一些无法以面向集合的方式完成的重要逻辑。如果您不能以另一种面向集合的方式执行它的功能,那么您可以使用 CURSOR .

您可以在您的集合上声明一个CURSOR SELECT whatever FROM #temptableOPEN 它,FETCH从游标到每列的变量,然后在插入中使用它们。

关于sql - 在 T-SQL/SQL Server 2000 中,引用结果集中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112656/

相关文章:

php - 错误 : Data truncated for column 'lat' at row 1

java - Hibernate session 连接关系

java - 将值保存到数据库

sql - 如何获取数据透视表每行的最大列数和最小列数?

sql - 使用 row_number() 时是否可以依赖输出顺序

sql - 这种类型的连接在最后被限定时被称为什么?

sql - 在 1 个数据库上授予 View

mysql - 在 'case function' 子句中使用 'ON'

sql - Oracle session 临时表中的数据何时会被删除?

sql-server - sqlcmd 关闭文本