Share via


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 彙總

  1. 開啟現有的 [SQL CLR 資料庫專案],或建立一個新專案。 如需詳細資訊,請參閱HOW TO:針對使用 SQL Server Common Language Run-time 整合的資料庫物件建立專案

  2. 在 [專案] 功能表中選取 [加入新項目]。

  3. 在 [加入新項目] 對話方塊中,選取 [彙總]。

  4. 為新彙總輸入 [名稱]。

  5. 加入執行彙總時執行的程式碼。 請參閱遵循此程序的第一個範例。

  6. 將彙總部署至 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 整合的資料庫物件建立專案

  7. 在 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 使用者定義型別

逐步解說:使用 Managed 程式碼建立預存程序

HOW TO:偵錯 SQL CLR 預存程序

參考

SQL CLR 資料庫專案和資料庫物件的屬性

概念

SQL Server CLR 整合簡介 (ADO.NET)

使用 Managed 程式碼建立資料庫物件的好處

以 Managed 程式碼建立 SQL Server 物件