C# 自定義sqlserver表值函式
首先普及一下什麼是表值函式,我是說個人理解啊,就是傳進去一個引數或者不傳引數,返回一個列表的函式,這個是通俗一點的說法,官方解釋Sql server 的表值函式是返回一個Table型別,table型別相當與一張儲存在記憶體中的一張虛擬表 下面說做法。
1,首先新建一個 C# CLR 資料庫專案
2,在裡面新建使用者自定義函式檔案,其實就是一個類
這裡可以直接右鍵生成和部署,這裡要注意了,選擇 net的版本,注意C# 引數的型別是否和資料庫型別匹配。
因為是表值函式,所以首先要宣告欄位,這裡注意,我是把Participle 類宣告在 UserDefinedFunctions 類當中. 宣告完了 就要返回 接著是自己的業務邏輯
下面是業務類的簡單寫法,
[SqlFunction(DataAccess = DataAccessKind.Read, FillRowMethodName = "ParticipleFunt_FillRow", TableDefinition = "ContentId nvarchar(400), Content nvarchar(400),Sort int")] public static IEnumerable ParticipleFunt(SqlString modified) { ArrayList resultCollection = new ArrayList(); string [] strmodified = modified.ToString().Split('\r'); for (int i = 0; i < strmodified.Length; i++) { resultCollection.Add(new Participle((i+1).ToString(),strmodified[i], i+1)); } return resultCollection; }
解釋一下上面的特性 (DataAccessKind.Read 描述使用者定義的方法或函式所使用的使用者資料訪問型別),(FillRowMethodName = "ParticipleFunt_FillRow", 指明返回函式)(TableDefinition = "ContentId nvarchar(400), Content nvarchar(400),Sort int“ 表示返回的列,這裡一定要注意哦,c# 的欄位型別一定要和 sqlserver 的欄位型別匹配,要不程式一直報錯,建議開啟除錯裡面的輸出,能看到時時編譯的錯誤)
做完上面的就可以右鍵生成和部署了, 生成很簡單,部署也很簡單,都是點選專案,然後在右鍵選單裡面。
最後再說幾句,因為是表值函式,所以我們自定義的時候返回表結構用的是 IEnumerable
最後測試語句用的是 select * from dbo.ParticipleFunt( 引數/null);
以上是C#編寫表值函式的所有做法。