
动态游标 动态sql 是一回事吗
动态sql我知道,比方说如下程序charsqlstatement[2048];sprintf(sqlstatement,"select*fromtab1wherecol1...
动态sql我知道,比方说如下程序
char sqlstatement[2048];
sprintf(sqlstatement,"select * from tab1 where col1='%s' and col2='%s'",argv[1],argv[2]);
EXEC SQL PREPARE stmt1 FROM :sqlstatement;
EXEC SQL DECLARE cur1 CURSOR FOR stmt1;
EXEC SQL OPEN cur1;
EXEC FETCH cur1 INTO :...
这个就是所谓的动态查询吗?
那这里面定义cur1是动态游标还是静态游标?
但网上描述:静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对基础数据进行的修改的游标。用户所做的更新、删除和插入在动态游标中加以反映。
看了网上描述动态游标与静态游标的对比说明,我觉得上段代码中的cur1应该是静态游标吧,如果是的话,那么动态游标又是什么样子的?能给一小段代码吗? 展开
char sqlstatement[2048];
sprintf(sqlstatement,"select * from tab1 where col1='%s' and col2='%s'",argv[1],argv[2]);
EXEC SQL PREPARE stmt1 FROM :sqlstatement;
EXEC SQL DECLARE cur1 CURSOR FOR stmt1;
EXEC SQL OPEN cur1;
EXEC FETCH cur1 INTO :...
这个就是所谓的动态查询吗?
那这里面定义cur1是动态游标还是静态游标?
但网上描述:静态游标是以游标打开时刻的当时状态显示结果集的游标。静态游标在游标打开时不反映对基础数据进行的更新、删除或插入。有时称它们为快照游标。动态游标是可以在游标打开时反映对基础数据进行的修改的游标。用户所做的更新、删除和插入在动态游标中加以反映。
看了网上描述动态游标与静态游标的对比说明,我觉得上段代码中的cur1应该是静态游标吧,如果是的话,那么动态游标又是什么样子的?能给一小段代码吗? 展开
1个回答
展开全部
SQL Server 支持的四种游标类型是:静态游标、动态游标、只进游标、由键集驱动的游标。其中动态游标是对结果集可以进行更新,当滚动游标时,动态游标反映结果集中所做的所有更改,结果集中的行数据值、顺序和成员在每次提取时都会改变。
静态服务器游标在 tempdb 中创建整个游标,由键集驱动的游标则在 tempdb 中创建键集
对于大结果集,使用动态游标更为适合。在查询语句中指定for update就可以更新结果集,或没有read_only就可以,常规情况下,不必关心是否动态,尚由服务器隐含转换的。
动态例子:
DECLARE abc CURSOR LOCAL FOR
SELECT c1, c2
FROM dbo.Table1;
OPEN abc;
FETCH abc;
UPDATE dbo.Table1
SET c2 = c2 + d2
FROM dbo.Table2
WHERE CURRENT OF abc;--更新游标
静态服务器游标在 tempdb 中创建整个游标,由键集驱动的游标则在 tempdb 中创建键集
对于大结果集,使用动态游标更为适合。在查询语句中指定for update就可以更新结果集,或没有read_only就可以,常规情况下,不必关心是否动态,尚由服务器隐含转换的。
动态例子:
DECLARE abc CURSOR LOCAL FOR
SELECT c1, c2
FROM dbo.Table1;
OPEN abc;
FETCH abc;
UPDATE dbo.Table1
SET c2 = c2 + d2
FROM dbo.Table2
WHERE CURRENT OF abc;--更新游标
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询