HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 彙總
將 [彙總] 項目加入至 SQL Server Common Language Runtime (SQL CLR) 資料庫專案,即可建立 SQL Server 彙總。 成功部署後,以 Managed 程式碼所建立的彙總,其呼叫和執行方式會類似其他 SQL Server 彙總的方式。
SQL Server 彙總需要實作四個特定方法:Init、Accumulate、Merge 和 Terminate。 如需詳細資訊,請參閱 Microsoft 網站上《SQL Server 線上叢書》中的 CLR 使用者定義彙總的需求。
注意事項 |
---|
根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱使用設定。 |
建立 SQL Server 彙總
若要建立 SQL Server 彙總
開啟現有的 [SQL CLR 資料庫專案],或建立一個新專案。 如需詳細資訊,請參閱HOW TO:針對使用 SQL Server Common Language Run-time 整合的資料庫物件建立專案。
在 [專案] 功能表中選取 [加入新項目]。
在 [加入新項目] 對話方塊中,選取 [彙總]。
為新彙總輸入 [名稱]。
加入執行彙總時執行的程式碼。 請參閱遵循此程序的第一個範例。
將彙總部署至 SQL Server。 如需詳細資訊,請參閱HOW TO:將 SQL CLR 資料庫專案項目部署至 SQL Server。
重要事項 SQL Server 2005 和 SQL Server 2008 僅支援使用 .NET Framework 2.0、3.0 或 3.5 版所建置的 SQL Server 專案。 如果您嘗試部署SQL Server專案,SQL Server 2005或SQL Server 2008,將顯示錯誤消息:Deploy error (SQL01268): .NET SqlClient Data Provider: Msg 6218, Level 16, State 3, Line 1 CREATE ASSEMBLY for assembly 'AssemblyName' failed because assembly 'AssemblyName' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database(在進行校驗是您要部署的程式集的名稱)。 如需詳細資訊,請參閱HOW TO:針對使用 SQL Server Common Language Run-time 整合的資料庫物件建立專案。
在 SQL Server 上執行彙總,進行偵錯。 請參閱遵循此程序的第二個範例。
範例
這個範例會建立可計算母音個數的彙總, 此彙總會計算字串資料型別之資料行中的母音個數。 聚合包含以下四個需要的方法,可以運行多執行緒:初始化,積累、 合併和終止。
Imports System
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
<Serializable()>
<SqlUserDefinedAggregate(Format.Native)>
Public Structure CountVowels
' count only the vowels in the passed-in strings
Private countOfVowels As SqlInt32
Public Sub Init()
countOfVowels = 0
End Sub
Public Sub Accumulate(ByVal value As SqlString)
Dim stringChar As String
Dim indexChar As Int32
' for each character in the given parameter
For indexChar = 0 To Len(value.ToString()) - 1
stringChar = value.ToString().Substring(indexChar, 1)
If stringChar.ToLower() Like "[aeiou]" Then
' it is a vowel, increment the count
countOfVowels = countOfVowels + 1
End If
Next
End Sub
Public Sub Merge(ByVal value As CountVowels)
Accumulate(value.Terminate())
End Sub
Public Function Terminate() As SqlString
Return countOfVowels.ToString()
End Function
End Structure
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
[Serializable]
[SqlUserDefinedAggregate(Format.Native)]
public struct CountVowels
{
// count only the vowels in the passed-in strings
private SqlInt32 countOfVowels;
public void Init()
{
countOfVowels = 0;
}
public void Accumulate(SqlString value)
{
// list of vowels to look for
string vowels = "aeiou";
// for each character in the given parameter
for (int i=0; i < value.ToString().Length; i++)
{
// for each character in the vowels string
for (int j=0; j < vowels.Length; j++)
{
// convert parameter character to lowercase and compare to vowel
if (value.Value.Substring(i,1).ToLower() == vowels.Substring(j,1))
{
// it is a vowel, increment the count
countOfVowels+=1;
}
}
}
}
public void Merge(CountVowels value)
{
Accumulate(value.Terminate());
}
public SqlString Terminate()
{
return countOfVowels.ToString();
}
}
部署彙總之後,在 SQL Server 執行它,進行測試,並驗證是否傳回正確資料。 這個查詢會針對連絡人資料表的 LastNames 資料行中的所有值傳回母音個數的結果集。
注意事項 |
---|
如果使用 AdventureWorks 2005,請將 Transact-SQL 範例程式碼中的 Person.Person 取代為 Person.Contact。 |
SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
FROM Person.Person
GROUP BY LastName
ORDER BY LastName
請參閱
工作
HOW TO:針對使用 SQL Server Common Language Run-time 整合的資料庫物件建立專案
HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 預存程序
HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 觸發程序
HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 使用者定義函式
HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 使用者定義型別