要使用游标,最好还是自己在程序里实现 以前实现过一个类似的,楼主自己参考吧--数据库说明:数据库名是qq,数据表名是hbh,含有字符型字段b --实现功能:将数据表hbh中的b的字符串连接成一个新的字符串,再回填给b--打开数据库qq USE qq GO --定义游标 DECLARE hbh_cursor CURSOR FOR SELECT b FROM hbh OPEN hbh_cursor --下移游标 FETCH NEXT FROM hbh_cursor --定义一个长度为1000的字符串变量 DECLARE @MyVar varchar(1000) set @MyVar='' --检查FETCH 语句成功。 WHILE @@FETCH_STATUS =0 BEGIN --将当前游标的字段b的值累加到变量 update hbh set @MyVar=@MyVar+b where CURRENT OF hbh_cursor --下移游标 FETCH NEXT FROM hbh_cursor END --把变量值赋值给字段b UPDATE hbh SET b=@MyVar CLOSE hbh_cursor DEALLOCATE hbh_cursor GO --不能将b按照不重复的字符连接起来 --迂回策略:先将表b导出成不重复的表b1 --即:SELECT DISTINCT b INTO hbh1 FROM hbh
在存储过程里做交叉表 看看这个例子 declare @sql varchar(8000)set @sql = 'select name,' select @sql = @sql + 'sum(case subject when '''+subject+''' then source else 0 end) as '''+subject+''',' from (select distinct subject from test) as aprint @sql select @sql = left(@sql,len(@sql)-1) + ' from test group by name'exec(@sql) END go
以前实现过一个类似的,楼主自己参考吧--数据库说明:数据库名是qq,数据表名是hbh,含有字符型字段b
--实现功能:将数据表hbh中的b的字符串连接成一个新的字符串,再回填给b--打开数据库qq
USE qq
GO
--定义游标
DECLARE hbh_cursor CURSOR FOR SELECT b FROM hbh
OPEN hbh_cursor
--下移游标
FETCH NEXT FROM hbh_cursor
--定义一个长度为1000的字符串变量
DECLARE @MyVar varchar(1000)
set @MyVar=''
--检查FETCH 语句成功。
WHILE @@FETCH_STATUS =0
BEGIN
--将当前游标的字段b的值累加到变量
update hbh set @MyVar=@MyVar+b where CURRENT OF hbh_cursor
--下移游标
FETCH NEXT FROM hbh_cursor
END
--把变量值赋值给字段b
UPDATE hbh SET b=@MyVar
CLOSE hbh_cursor
DEALLOCATE hbh_cursor
GO
--不能将b按照不重复的字符连接起来
--迂回策略:先将表b导出成不重复的表b1
--即:SELECT DISTINCT b INTO hbh1 FROM hbh
declare @sql varchar(8000)set @sql = 'select name,' select @sql = @sql + 'sum(case subject when '''+subject+''' then source else 0 end) as '''+subject+''',' from (select distinct subject from test) as aprint @sql select @sql = left(@sql,len(@sql)-1) + ' from test group by name'exec(@sql)
END
go
不过在程序里实现要比在数据库里实现效率高