SQL2005使用CLR函式獲取行號

2021-08-23 13:58:50 字數 1812 閱讀 7342

行號可以廣泛使用在分頁或者報表當中。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使用CLR函式獲取行號

行號可以廣泛使用在分頁或者報表當中。sql2005使用row number來獲取,但這個需要配合order來處理,資料量大的情況下可能會影響效能。要實現clr自定函式返回行號的關鍵問題是乙個自增長的序列如何儲存,並且需要考慮併發和釋放的問題。這裡我用了乙個靜態的集合來保持這個事物,缺點是每次查詢必須...

SQL2005新增函式

sql2005新增函式 sql2005新增了幾個結果集行號 排名 分組等函式,給我們帶來了很大的方便。1.row number函式 返回結果集分割槽內行的序列號。sql表是基於集合的,沒有像dbf,access這樣的記錄行的概念。row number函式返回行號不是資料表的物理行號,而是結果集分割槽...

使用SQL2005 替代 SQLEXPRESS

使用sql2005 替代 sqlexpress 開啟sql server configuration manager 使能tcp ip協議 建立以下別名 別名 172.17.5.47 sqlexpress 別名 127.0.0.1 sqlexpress 別名 username sqlexpress ...