您的位置:首页 > 数据库

常用SQL查询问题

2016-08-10 11:07 176 查看
sql中修改动态表的列名
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server