gpt4 book ai didi

sql - 遍历SQL Server 2008中的行

转载 作者:行者123 更新时间:2023-12-03 12:27:23 25 4
gpt4 key购买 nike

考虑表SAMPLE:

id       integer
name nvarchar(10)

有一个名为 myproc的存储过程。它只需要一个参数(即id)

给定名称作为参数,找到所有带有 name = @nameparameter的行并传递所有这些ID
myproc
例如:
sample->
1 mark
2 mark
3 stu
41 mark

传递 mark时,应将 1 ,2 and 41分别传递给 myproc

即应发生以下情况:
execute myproc 1
execute myproc 2
execute myproc 41

我无法触摸 myproc也看不到其内容。我只需要将值传递给它。

最佳答案

如果必须迭代(*),请使用设计用于实现它的结构cursor。我非常讨厌,但是如果它最清楚地表达了您的意图,请说:

DECLARE @ID int
DECLARE IDs CURSOR LOCAL FOR select ID from SAMPLE where Name = @NameParameter

OPEN IDs
FETCH NEXT FROM IDs into @ID
WHILE @@FETCH_STATUS = 0
BEGIN
exec myproc @ID

FETCH NEXT FROM IDs into @ID
END

CLOSE IDs
DEALLOCATE IDs

(*)这个答案最近得到了一些好评,但是我觉得我也应该在这里加入我的原始评论,并添加一些一般性建议:

在SQL中,通常应寻求基于集合的解决方案。整个语言都围绕基于集合的解决方案,(依次)优化器围绕使基于集合的解决方案正常工作。另一方面,我们可用于优化优化器的工具也是面向集合的-例如将索引应用于表。

在某些情况下,迭代是最好的方法。这些之间相隔甚远,并且可以比作Jackson的优化规则-不做-并且(仅对于专家)不做。

首先,根据受影响的所有行的集合,您最好尝试制定自己想要的东西-要实现的总体变化是什么? -然后尝试制定一个包含该目标的查询。只有这样做产生的查询不能充分发挥作用(或者有某些其他组件除了单独处理每行之外,无法执行其他任何操作),才应 考虑迭代。

关于sql - 遍历SQL Server 2008中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6606709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com