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 另一個存儲過程名 參數...