【问题标题】:How to get the first row details using rowcount?如何使用 rowcount 获取第一行详细信息?
【发布时间】:2012-09-21 07:42:27
【问题描述】:

我有一个名为 @rows 的临时变量,在这样的存储过程中有近 10000 条记录

Create Procedure input
as
begin
declare @input_data table(......)
insert into (.....) from ....
@rows= select @@rowcount
while(@rows > o)
begin
--- I need to process each row like
select ... where @row=1 --like this repeatedly upto @rows = 10000
end

我应该如何实现这一点。请帮助我 提前致谢

【问题讨论】:

  • 循环/游标很少是 SQL 操作中的最佳方法。它是一种基于集合的语言,并且通常还没有找到基于集合的解决方案。也许考虑提出一个新问题以寻求帮助以找到基于集合的解决方案,而不是寻求帮助来修复您的程序解决方案。它几乎肯定会在性能方面带来好处(我无法提供任何建议,因为我不知道您对每一行都做了什么)。

标签: sql rowcount


【解决方案1】:

您可以根据某些条件直接更新表,并使用 CASE 语句代替使用 while 循环。

【讨论】:

  • 我该如何使用 case 语句呢?请给我一些例子
  • 如果您告诉我要更新的内容和表格结构,那么我可以提供帮助
【解决方案2】:

您可以使用 CURSOR 实现您的目标

DECLARE @ID AS INT

DECLARE TestCursor CURSOR
FOR (SELECT ID FROM Test)

OPEN TestCursor
    FETCH NEXT FROM TestCursor INTO @ID

    WHILE @@Fetch_Status = 0
    BEGIN
        --Your Code Here
        PRINT  @ID --Print For Testing
        FETCH NEXT FROM TestCursor INTO @ID
    END

CLOSE TestCursor
DEALLOCATE TestCursor

记住:使用游标会导致性能损失 而是在查询中使用 CASE 语句进行条件选择/更新,如另一个答案中所述

【讨论】:

  • 我该如何使用 case 语句呢?请给我一些例子。
  • 您真的需要更新/选择多条记录(所有记录)还是一条记录?您的目标不是 100% 明确的!请解释一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多