有 **************************** 游标 关系数据库中的操作会对整个行集产生影响。由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行。由语句所返回的这一完整的行集被称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。游标通过以下方式扩展结果处理: 允许定位在结果集的特定行。 从结果集的当前位置检索一行或多行。 支持对结果集中当前位置的行进行数据修改。 为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。 提供脚本、存储过程和触发器中使用的访问结果集中的数据的 Transact-SQL 语句。 请求游标 Microsoft® SQL Server™ 2000 支持两种请求游标的方法: Transact-SQL 对根据 SQL-92 游标语法制定的游标,Transact-SQL 语言支持使用它们的语法。数据库应用程序编程接口(API)游标函数 SQL Server 支持这些数据库 API 的游标功能:ADO(Microsoft ActiveX® 数据对象) OLE DB ODBC(开放式数据库连接) DB-Library 应用程序不能混合使用这两种请求游标的方法。已经使用 API 指定游标行为的应用程序不能再执行 Transact-SQL DECLARE CURSOR 语句请求一个 Transact-SQL 游标。只有在将所有 API 游标特性均设回默认值后,应用程序才可以执行 DECLARE CURSOR。如果 Transact-SQL 和 API 游标均未被请求,则默认情况下 SQL Server 将一个完整的结果集返回给应用程序,这个结果集称为默认结果集。游标进程 Transact-SQL 游标和 API 游标有不同的语法,但下列一般进程可用于所有 SQL Server 游标: 把游标与 Transact-SQL 语句的结果集相关联,并且定义游标的特征,如是否能够更新游标中的行。 执行 Transact-SQL 语句以填充游标。 检索想要查看的游标中的行。从游标中检索一行或多行的操作称为提取。执行一系列的提取操作以向前或向后检索行的操作称为滚动。 根据需要,对游标中当前位置的行执行修改操作(更新或删除)。 关闭游标。
我的破机器快把我气死了,经常删除不了字符Declare cur1 cursor for select col,col2 from tb1 where .... open cur1 ... ... close cur1 dellocate cur1
使用游标生成内码! -- 商品资料事先已经准备在db_sptb 中 -- 导入前 关键索引dspcode -- 提示: 为了安全操作,在做任何数据改动时,一定要先做数据备份! -- 先在库里生成SQL脚本,修改脚本的所建的表名(db_sptb)、以及DSPID改为可以为空。 -- 查询db_sptb中可否有重复的dspcode -- 修改db_sptb的dspid --begin transaction HWCSDECLARE @title char(11),@i int set @i=1 DECLARE titles_cursor CURSOR FOR -- 创建游标 SELECT dspcode FROM db_sptb order by dspcode OPEN titles_cursor -- 打开游标 -- 游标定位开始 index-1 //return the frist recode (dspcode) for titles_cursor FETCH NEXT FROM titles_cursor INTO @title WHILE @@FETCH_STATUS = 0 -- 循环开始 0- Fetch 返回成功 BEGIN -- insert into Object_tb values source_tb insert into docdsp (col1,col2,col3.......) select col1,col2,col3..... from db_sptb where dspcode=@title -- 生成并插入商品内码 update docdsp set dspid ='SP'+right(cast(1000000000+@i as char(10)),9) where dspcode =@title FETCH NEXT FROM titles_cursor INTO @title --游标定位 select @i=@i+1 --循环计数增加 END CLOSE titles_cursor --关闭游标 DEALLOCATE titles_cursor --释放引用--Rollback Transaction HWCS
sql 联机丛书--索引--DECLARE CURSOR部分
to: yesterday2000(一笑而过) 多谢大侠指点,有一点不太明白,游标开始的时候是否是从记录集的第一条开始,记录集的第一条是0还是1?怎么开始的时候就FETCH NEXT ?
if @class<>'' begin @class=(@class+'班') end if @step<>'' begin @step=(@step+'階') end有什麽錯誤麽?
****************************
游标
关系数据库中的操作会对整个行集产生影响。由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行。由语句所返回的这一完整的行集被称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。游标通过以下方式扩展结果处理: 允许定位在结果集的特定行。
从结果集的当前位置检索一行或多行。
支持对结果集中当前位置的行进行数据修改。
为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。
提供脚本、存储过程和触发器中使用的访问结果集中的数据的 Transact-SQL 语句。
请求游标
Microsoft® SQL Server™ 2000 支持两种请求游标的方法: Transact-SQL
对根据 SQL-92 游标语法制定的游标,Transact-SQL 语言支持使用它们的语法。数据库应用程序编程接口(API)游标函数
SQL Server 支持这些数据库 API 的游标功能:ADO(Microsoft ActiveX® 数据对象)
OLE DB
ODBC(开放式数据库连接)
DB-Library
应用程序不能混合使用这两种请求游标的方法。已经使用 API 指定游标行为的应用程序不能再执行 Transact-SQL DECLARE CURSOR 语句请求一个 Transact-SQL 游标。只有在将所有 API 游标特性均设回默认值后,应用程序才可以执行 DECLARE CURSOR。如果 Transact-SQL 和 API 游标均未被请求,则默认情况下 SQL Server 将一个完整的结果集返回给应用程序,这个结果集称为默认结果集。游标进程
Transact-SQL 游标和 API 游标有不同的语法,但下列一般进程可用于所有 SQL Server 游标: 把游标与 Transact-SQL 语句的结果集相关联,并且定义游标的特征,如是否能够更新游标中的行。
执行 Transact-SQL 语句以填充游标。
检索想要查看的游标中的行。从游标中检索一行或多行的操作称为提取。执行一系列的提取操作以向前或向后检索行的操作称为滚动。
根据需要,对游标中当前位置的行执行修改操作(更新或删除)。
关闭游标。
open cur1
...
...
close cur1
dellocate cur1
-- 商品资料事先已经准备在db_sptb 中
-- 导入前 关键索引dspcode
-- 提示: 为了安全操作,在做任何数据改动时,一定要先做数据备份!
-- 先在库里生成SQL脚本,修改脚本的所建的表名(db_sptb)、以及DSPID改为可以为空。
-- 查询db_sptb中可否有重复的dspcode
-- 修改db_sptb的dspid
--begin transaction HWCSDECLARE @title char(11),@i int
set @i=1 DECLARE titles_cursor CURSOR FOR -- 创建游标
SELECT dspcode FROM db_sptb order by dspcode OPEN titles_cursor -- 打开游标 -- 游标定位开始 index-1 //return the frist recode (dspcode) for titles_cursor
FETCH NEXT FROM titles_cursor INTO @title
WHILE @@FETCH_STATUS = 0 -- 循环开始 0- Fetch 返回成功
BEGIN -- insert into Object_tb values source_tb
insert into docdsp (col1,col2,col3.......) select col1,col2,col3.....
from db_sptb where dspcode=@title -- 生成并插入商品内码
update docdsp set dspid ='SP'+right(cast(1000000000+@i as char(10)),9) where dspcode =@title FETCH NEXT FROM titles_cursor INTO @title --游标定位
select @i=@i+1 --循环计数增加 END CLOSE titles_cursor --关闭游标
DEALLOCATE titles_cursor --释放引用--Rollback Transaction HWCS
if @step<>'' begin @step=(@step+'階') end有什麽錯誤麽?