行號可以廣泛使用在分頁或者報表當中。sql2005使用row_number來獲取,但這個需要配合order來處理,資料量大的情況下可能會影響效能。
要實現clr自定函式返回行號的關鍵問題是乙個自增長的序列如何儲存,並且需要考慮併發和釋放的問題。這裡我用了乙個靜態的集合來保持這個事物,缺點是每次查詢必須初始化乙個集合的隨機key,並在本次查詢後銷毀。
下面我就歸入正文,乙個可以實現上述思路的c#**如下:
using
system;
using
system.data;
using
system.data.sqlclient;
using
system.data.sqltypes;
using
microsoft.sqlserver.server;
///
/// 引用請保留以下資訊:
///
/// 使用者自定clr 函式,用來生成乙個序列
///by:jinjazz (近身剪)
//////
///public
partial
class
userdefinedfunctions
catch
}///
///銷毀查詢標識
///
///
[microsoft.sqlserver.server.sqlprocedure ]
public
static
void getrownumend(sqlstring key)
catch
} };
部署上面的clr函式可以執行如下sql語句,我們在測試環境中部署
exec
sp_configure
'show advanced options'
,'1';
go reconfigure;
go exec
sp_configure
'clr enabled'
,'1' go
reconfigure;
exec
sp_configure
'show advanced options'
,'1';
go
-- 測試資料庫
create
database testdb go
usetestdb go
alter
database testdb set trustworthy on go
create
assembly testass from
'e:\sqlserverproject3.dll'
with permission_set = unsafe; --
gocreate
function dbo. getrownum (
@key nvarchar
( 100) )
returns
bigint as
external
name testass. [userdefinedfunctions]. getrownum go
create
proc dbo. getrownumend (
@key nvarchar
( 100) )
asexternal
name testass. [userdefinedfunctions]. getrownumend
接下來我們做個簡單測試,如下sql語句
行號可以廣泛使用在分頁或者報表當中。sql2005使用row number來獲取,但這個需要配合order來處理,資料量大的情況下可能會影響效能。要實現clr自定函式返回行號的關鍵問題是乙個自增長的序列如何儲存,並且需要考慮併發和釋放的問題。這裡我用了乙個靜態的集合來保持這個事物,缺點是每次查詢必須... sql2005新增函式 sql2005新增了幾個結果集行號 排名 分組等函式,給我們帶來了很大的方便。1.row number函式 返回結果集分割槽內行的序列號。sql表是基於集合的,沒有像dbf,access這樣的記錄行的概念。row number函式返回行號不是資料表的物理行號,而是結果集分割槽... 使用sql2005 替代 sqlexpress 開啟sql server configuration manager 使能tcp ip協議 建立以下別名 別名 172.17.5.47 sqlexpress 別名 127.0.0.1 sqlexpress 別名 username sqlexpress ...SQL2005使用CLR函式獲取行號
SQL2005新增函式
使用SQL2005 替代 SQLEXPRESS