Практическое руководство. Создание и запуск статистического выражения SQL Server при помощи интеграции со средой CLR

Создайте статистические выражения SQL Server, добавив элементы Статистическое выражение в проекты базы данных SQL Server со средой CLR. После успешного развертывания статистические выражения, созданные в управляемом коде, вызываются и выполняются как любые другие статистические выражения SQL Server.

Статистические выражения SQL Server требуют реализации четырех конкретных методов: Init, Accumulate, Merge и Terminate. Дополнительные сведения см. в разделе Требования к пользовательским статистическим выражениям CLR электронной документации по SQL Server, доступной на веб-сайте корпорации Майкрософт.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от действующих параметров или выпуска.Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров.Дополнительные сведения см. в разделе Работа с параметрами.

Создание агрегатных функций SQL Server

Чтобы создать агрегатную функцию SQL Server:

  1. Откройте существующий Проект базы данных SQL CLR или создайте новый. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта для объектов базы данных, использующих интеграцию SQL Server со средой CLR.

  2. В меню Проект выберите команду Добавить новый элемент.

  3. В диалоговом окне Добавление нового элемента выберите Статистическое выражение.

  4. Введите Имя для новой агрегатной функции.

  5. Добавьте код для выполнения при запуске агрегатной функции. Ознакомьтесь с первым примером, следующим за этой процедурой.

  6. Разверните статистическое выражение на сервере SQL Server. Дополнительные сведения см. в разделе Практическое руководство. Развертывание элементов проекта базы данных SQL в среде CLR на сервере SQL Server.

    Важно!

    SQL Server 2005 и SQL Server 2008 поддерживают только проекты SQL Server, созданные с использованием версий 2.0, 3.0 и 3.5 платформы .NET Framework.Если вы попробуете развернуть 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(где имя_сборки — это имя сборки, развертывания).Дополнительные сведения см. в разделе Практическое руководство. Создание проекта для объектов базы данных, использующих интеграцию SQL Server со средой CLR.

  7. Проведите отладку статистического выражения, выполнив его на сервере SQL Server. Ознакомьтесь со вторым примером, следующим за этой процедурой.

Пример

Этот пример создает агрегатную функцию для подсчета гласных. Это статистическое выражение подсчитывает гласные в столбце строковых типов данных. Статистическая функция содержит следующие четыре необходимых метода, которые могут выполняться в многопоточном: Init, накапливать, слияние и прекратить.

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 в таблице Contact.

Примечание

При использовании AdventureWorks2005 замените Person.Person на Person.Contact в образце кода Transact-SQL.

SELECT LastName, COUNT(LastName) AS CountOfLastName, dbo.CountVowels(LastName) AS CountOfVowels
FROM Person.Person
GROUP BY LastName
ORDER BY LastName

См. также

Задачи

Практическое руководство. Создание проекта для объектов базы данных, использующих интеграцию SQL Server со средой CLR

Практическое руководство. Создание и запуск хранимой процедуры SQL Server при помощи интеграции со средой CLR

Практическое руководство. Создание и запуск триггера SQL Server при помощи интеграции со средой CLR

Практическое руководство. Создание и запуск пользовательской функции SQL Server при помощи интеграции со средой CLR

Практическое руководство. Создание и запуск пользовательского типа SQL Server при помощи интеграции со средой CLR

Пошаговое руководство. Создание хранимой процедуры в управляемом коде

Практическое руководство. Отладка хранимой процедуры SQL CLR

Ссылки

Атрибуты проектов баз данных SQL в среде CLR и объектов баз данных

Основные понятия

Введение в интеграцию SQL Server со средой CLR (ADO.NET)

Преимущества использования управляемого кода для создания объектов баз данных

Создание объектов SQL Server в управляемом коде