我可以理解为了避免因为开销和不便而不得不使用光标,但看起来有一些严重的光标 - 恐惧症 - 狂热正在进行,人们将不遗余力地避免使用光标.
例如,有一个问题询问如何使用游标执行明显无关紧要的操作,并使用带有递归自定义函数的公用表表达式(CTE)递归查询提出接受的答案,即使这会将可处理的行数限制为32 (由于sql server中的递归函数调用限制).这让我觉得它是系统寿命的可怕解决方案,更不用说为了避免使用简单的光标而付出的巨大努力.
这种疯狂仇恨的原因是什么?有一些"着名的权威"发布了针对游标的法特瓦吗?一些无法形容的邪恶是否潜伏在游戏的核心,腐蚀了儿童的道德或什么?
维基问题,答案比代表更感兴趣.
相关信息:
编辑:让我更精确:我理解不应该使用游标而不是正常的关系操作 ; 这是一个明智的选择.我不明白的是,即使游标是一种更简单和/或更有效的解决方案,人们也会不顾一切地避开光标,就像他们有傻瓜一样.困扰我的是非理性的仇恨,而不是明显的技术效率.
我想要一个有效的MySQL存储过程:
foreach id in (SELECT id FROM objects WHERE ... ) CALL testProc(id)
我想我只是希望MySQL回答这个问题,但我不太了解游标:如何为查询返回的每一行执行一次存储过程?
如何创建临时表与创建普通表类似?
例:
CREATE TABLE table_name
(
column1 datatype,
column2 datatype,
column3 datatype,
....
);
Run Code Online (Sandbox Code Playgroud) 我刚刚使用 Microsoft SQL Server 2008 R2 启动 SQL,我想选择一个 Id 列表并通过存储过程运行每个 Id,但不知道如何执行。
SELECT Id
FROM UserId
WHERE ProgramId = @ProgramId
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个名为temp_sp_UpdateIds
通常我可以运行存储过程
EXEC temp_sp_UpdateIds @ProgramId
Run Code Online (Sandbox Code Playgroud)
但我不确定如何使用从 select 语句返回的 Id 列表运行存储过程并将其放在@ProgramId
我需要将 Id 存储在本地表中吗?
谢谢。