SQLserver 資料庫自定義函式

2022-01-12 17:52:21 字數 3308 閱讀 5531

最近專案開發上使用的sqlserver資料庫是2008版本,由於08版本的資料是沒有字串合併(string_agg)這個函式(2017版本及以上支援)的,只有用stuff +for xml path('') 來達到效果。所以才有萌生出了自定義聚合函式的想法。
第一步新建專案:

2008版本選擇 檔案→新建→專案→sql server專案

建立成功結果如下:

第二步新建項→聚合:

第三步:編寫**(實現字串合併的函式**如下)
聚合函式**
using system;

using system.data;

using microsoft.sqlserver.server;

using system.data.sqltypes;

using system.io;

using system.text;

[serializable]

[sqluserdefinedaggregate(

format.userdefined, //use clr serialization to serialize the intermediate result

isinvarianttonulls = true, //optimizer property

isinvarianttoduplicates = false, //optimizer property

isinvarianttoorder = false, //optimizer property

maxbytesize = 8000) //maximum size in bytes of persisted value

]public class concatenate : ibinaryserialize

/// /// accumulate the next value, not if the value is null

///

///

public void accumulate(sqlstring value)

}/// /// merge the partially computed aggregate with this aggregate.

///

///

public void merge(concatenate other)

/// /// called at the end of aggregation, to return the results of the aggregation.

///

///

public sqlstring terminate()

return new sqlstring(output);

}public void read(binaryreader r)

public void write(binarywriter w)

}

第四步:生成專案dll並放於其他目錄下面(非必須,c盤可能存在許可權問題在註冊時無法使用)

我放在f盤下面的這個路徑

第一步:允許sqlserver安裝外部程式集

資料庫預設是不允許安裝外部程式級的,需要通過sp_configure命令 修改clr enabled

/*允許程式使用外部程式集*/

exec sp_configure 'clr enabled', 1

reconfigure with override

go第二步:解決安全許可權的配置引發的問題(不執行這一步就會觸發安全許可權配置問題)

/*sp_add_trusted_assembly的方式新增信任到資料庫裡去.*/

declare @hash as binary(64) = (select hashbytes('sha2_512', (select * from openrowset (bulk 'f:\conactdll\database3.dll', single_blob) as [data])))

第三步:建立程式集與聚合函式

create assembly myagg from 'f:\conactdll\database3.dll'

with permission_set = safe;

gocreate aggregate myagg (@input nvarchar(200)) returns nvarchar(max)

external name myagg.concatenate;

註冊完成之後系統資料庫會出現我們自定義的聚合函式

select  dbo.myagg(需要合併的表字段)  結果 from   表  where 查詢條件

使用效果如下:

使用vs2019新建sqlserver資料庫專案

第一步:建立專案

第二步:新增新項

後面就可以開始編寫**了,操作流程跟之前的 08 版本一樣

最後附上已經寫好的兩個版本,需要的同學自取: 提取碼: 8wyq

文章參考:

自定義mysql資料庫函式 資料庫自定義函式

這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...

資料庫PostrageSQL 自定義選項

這個特性被設計用來由附加模組向postgresql新增通常不為系統知道的引數 例如過程語言 這允許使用標準方法配製擴充套件模組。自定義選項有兩部分名稱 乙個副檔名,然後是乙個句點,再然後是正確的引數名,就像sql 中的合格名稱。乙個例子是plpgsql.variable conflict。因為自定義...

SQL SERVER 自定義函式

元宵節快樂 自定義函式分為兩類 一類為 標量函式,一類為表值函式。create funetion 函式名 引數 return 返回值資料型別 with as begin sql語句 必須有return 變數或值 end 一 內聯 值函式 create function 函式名 引數 returns ...