sybase分页存储过程
Sybase数据库中的高效分页方法
Sybase使用rank() over(order by id)ret的方式分页,这种方式在数据量达到40W条的时候很耗时,大概5S的时间,当达到千万条的时候,查询一次大概是1分40秒
对于这种方式,瓶颈可能是出在排序部分,当排序的唯一字段是varchar类型的时候更加明显
现在有种新的方式,就是利用rowid。
如:select a.* from table_name a where rowid(a) >=1 and rowid(a)<11
经测试,在同一张表中,1500W的数据量,每次查询时间都在200ms以内
但是这个函数只能用在真实的数据表,无法在临时表中用到;
这个rowid,是在数据插入的时候,数据库给每行数据分配的物理唯一标识,如果要页面中要用到动态排序,这个是不支持的。
⑵ sybase 存储过程
因为你在存储过程中使用的是变量,而没有使用输入参数,如果将你的这个变量声明成输入参数,就可以实现了。create proc data(@username varchar(20)) as . begin ..... end.
⑶ 请教sybase的存储过程中如何实现动态sql
1.EXEC的使用
EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。
下面先使用EXEC演示一个例子,代码1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);
sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要为重用执行计划提供更好的支持。
为了和EXEC作一个鲜明的对比,我们看看如果用代码1的代码,把EXEC换成sp_executesql,看看是否得到我们所期望的结果
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql
⑷ sybase数据库是否支持查询分页
sybase不支持分页查询。要想分页查询需自己写存储过程
⑸ 如何查看sybase存储过程的内容
1
在isql(或SQL
Advantage)中执行:
sp_helptext
存储过程名
可以查看存储过程的内容。
2
在
SQL
CENTRAL里连接你的服务器用sa登录,点击你的用户数据库,展开树就有
Stored
proceres,所有的存储过程就在里面。
⑹ linux环境下如何查看sybase数据库中有哪些表有哪些存储过程如何把sybase数据库导出
可以用以下SQL语句查找存储过程:
selectdistinctname
fromsysobjects
wheretype='P'
如何查看SYBASE数据库中的所有表名?看如下SQL语句:
="U";
如何把sybase数据库导出,使用如下:
mpdatabasefromsybase1to"/mysybase.mp";
sybase1是你的数据库名,/mysybase.mp表示linux根目录下,保存为mysybase.mp。
⑺ 如何快速导出SYBASE的存储过程
方法1:使用外部工具; 方法2:自己编写代码 -- 效果、方便性差一些 - 定义游标,对于sys.objects中type='P'的对象(即所有过程),遍历 - 对于每个过程,使用helpText 来得到脚本。
⑻ sybase怎么批量导出存储过程
自做一SHELL脚本,
将存储过程名从 sysobjects中选出
然后通过 sp_helptext 导出
获取每个存储过程内容
⑼ sybase存储过程,请问为什么它只执行一个cursor
--解析tableB 这里不会执行,或者只会打印一条记录,正常的应该是遍历所有的记录的。
declare cur_tableB
cursor for
select
vcAreaID areaIDAttach,
round(sum(intSuc)*1.00/count(1),4) attachSucRate,
round(avg(dbTimeLen)*1.00,2) dbTimeLen
from tableB
where 1=1
and dtEndTime>=@sTime
and dtEndTime<@eTime
and intSystemID=3
group by vcAreaID
open cur_tableB
while(@@sqlstatus=0)
begin
fetch cur_tableB into @areaIDAttach,@attachSucRate,@dbTimeLen
print "areaIDAttach=%1!,attachSucRate=%2!,dbTimeLen=%3!",@areaIDAttach,@attachSucRate,@dbTimeLen
end
close cur_tableB
end
⑽ sybase存储过程中怎么调用存储过程
1.begin tran
.....(SQL)
if @@error=0
commit
else
rollback
2.exec 另一个存储过程名 参数...