常用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()中创建后再引用,通常用于动态游标.可以这样处理:(实测 错误)
在存储过程中怎么将查询出的多条记录赋值给变量
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
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查询语句问题- sum求和的值作为查询条件
- sql统计查询问题
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 一个SQL语句查询问题(查询最小值
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- Oracle常用sql查询[转]
- 一个分组查询的SQL 常用算法(附源码可直接执行)
- 数据库sql的查询统计问题 用存储过程实现;
- Hibernate Native SQL查询常用的2种方法及对返回结果处理
- oracle常用经典SQL查询
- oracle常用sql查询语句部分集合(图文)
- SQL常用查询更新介绍(DML)
- oracle常用经典SQL查询
- 整理出的数据库中几个常用sql查询语句
- 项目中一个简单SQL查询问题,已经解决了,留个纪念,非常感谢帮我的朋友们。
- 常用SQL查询脚本
- sql排序规则问题,不能查询访问中文
- 两个常用的SQL语句(查询最大值、取得子结点)
- 一个分组查询的SQL 常用算法(附源码可直接执行)
- oracle常用经典SQL查询