sp_rename的@objname参数可以是一个字符串,也可以是一个字符串变量.但不可以是两者的混合型.所以,如果要动态修改表,那么可参照如下形式:
declare @objname varchar(50);
set @objname='动态表名'; /*补充解释:这里的'动态表名'就是你原来的@table变量,该变量的值必须是一个明确的表名,如:'11级'*/
set @objname=@objname+'.F5';
exec sp_rename @objname,'理论','column';
注意:'11级'这样的表名是不合法的,引用时请加上中括号[],如[11级]
修改后的代码如下:
declare @objname varchar(50);
set @objname='['+动态表名+'].F5';
exec sp_rename @objname,'理论','column';
-------------------------------------------------------------------------------------------
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0----注意此处循环方式(实测可用)
BEGIN
--UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
--DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
-------------------------------------------------------------------------------------------------------
declare cur_BBB BBB%rowtype;
cursor BBB_TEM_cur is select * from BBB_TEM;
begin
open BBB_TEM_cur;
loop--注意此处循环方式
fetch BBB_TEM_cur into cur_BBB;
exit when BBB_TEM_cur%notfound;
update BBB
set BBB.BID=cur_BBB.BID
where BBB.BNAME=cur_BBB.BNAME;
end loop;
commit;
end;
-------------------------------------------------------------------------------------------------
游标比较特殊,可以在EXEC()中创建后再引用,通常用于动态游标.可以这样处理:(实测 错误)
declare @sql varchar(8000),@table sysname set @table = 'table1' set @sql='DECLARE abc CURSOR global FOR select * from ' + @table --global 全局游标才能使用 exec(@sql) OPEN abc --直接加入就可以,不用sql拼接??有时可用 declare my_cur1 cursor for select id,PropertyId,Value,preValue from RealtimeData where DTime=CONVERT(varchar(20),@GDTime,120)
在存储过程中怎么将查询出的多条记录赋值给变量
create proc upt_sp
as
begin
declare @name,...
declare mycur cursor for select name,... from table where ....
open mycur
fetch next from mycur into @name,...
begin
update table2 set name=@name,... where .....
fetch next from mycur into @name,...
end
close mycur
deallocate mycur
end
大量数据处理基础操作思路
1、批量插入
insert into T1(n1,n2,n3)
select m1,m2,m3 from T2
--批量更新
update T1 set T1.a=T2.a
where T1.b=T2.b(这里如果关联表较多,可以先查询出结果,用结果表关联查处需要的参数)
2、拼接字段,来用update或insert一次执行,注意varchar最长为8000