Partilhar via


Demonstra Passo a passo: Depurar uma função definida pelo usuário com valor de tabela da SQL CLR

Este tópico se aplica a:

Edição

Visual Basic

C#

C++

Desenvolvedores Web

Express

Padrão

PRO e equipe

Legenda de tabela:

Aplica-se

Não é aplicada

Comando ou comandos oculta por padrão.

Este exemplo mostra como depurar um SQL CLR usuário Defined função com valor de tabela (UDF).

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Para depurar uma função de valor de tabela definida pelo usuário SQL CLR

  1. Em um novo projeto SQL servidor, estabelecer uma conexão para um banco de dados.Para obter mais informações, consulte Como: Conectar-se a um banco de dados.

  2. Crie uma nova função usando o código da primeira seção do exemplo abaixo e nomeie-TableOfPrimes.cs.Para obter mais informações, consulte Como: Desenvolver com o SQL servidor tipo de projeto.

  3. Adicionar um script que testa a função incluindo-o em um SELECT demonstrativo. In O gerenciador de soluções, clicar com o botão direito do mouse o TestScripts diretório, clique em Adicionar script de teste e inserir o código da segunda de seções de exemplo a seguir.salvar o arquivo com o nome TestPrime.sql.clicar com o botão direito do mouse no nome de arquivo e clique em conjunto sistema autônomo padrão o script de depurar.

  4. conjunto pontos de interrupção em TableOfPrimes.cs e, em seguida, sobre o Depurar menu, clicar Iniciar para compilar, implantar e unidade de teste do projeto.Quando o ponteiro de instrução, designado por uma seta amarela, aparece em um ponto de interrupção, você está depurando o código SQL CLR.

  5. Experimente recursos de depuração diferentes.

    1. Sobre o Depurar menu, clicar Passar dentro repetidamente para observar a linha por linha de execução da função.

    2. sistema autônomo percorrer a função, você pode usar o Variáveis locais and Observação janelas para observar sistema autônomo valores dos membros diferentes.

    3. clicar Continuar novamente para concluir a depuração da função.

    4. No Saída janela, selecionar Saída de banco de dados from the Show output from na lista suspensa e você pode observar os resultados da execução de duas consultas no script TestPrimes.sql.

Exemplo

Esse é o código que lê o registro de eventos.

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;

public partial class UserDefinedFunctions
{
    struct primeIndex
    {
        public int n;
        public int p;
        public primeIndex(int n, int p)  
        { 
            this.n = n; this.p = p;
        }
    }

    static bool isPrime(int p)
    {
        if (p < 2) return false;
        if (p == 2) return true;
        if (p % 2 == 0) return false;
        for (int d = 3; d * d <= p; d+=2)
        {
            if (p % d == 0) return false;
        }
        return true;
    }

    static int nextPrime(int p)
    {
        int result = p + 1;
        while (!isPrime(result)) result++;
        return result;
    }

    [SqlFunction(FillRowMethodName = "Fill", TableDefinition = "n int,p int,est float")]
    public static IEnumerable TableOfPrimes(int n)
    {
        int p = 1;
        for (int i = 1; i <= n; i++)
        {
            p = nextPrime(p);
            yield return new primeIndex(i, p);
        }
    }

    private static void Fill(object source, out int n, out int p, out SqlDouble est)
    {
        primeIndex pi = (primeIndex)source;
        n = pi.n;
        p = pi.p;
        if (n <5)
            est = SqlDouble.Null;
        else
        {
            double log = Math.Log(n);
            double loglog = Math.Log(log);
            est = n * (log + loglog - 1 + loglog / log - 2 / log); 
        }
    }
}

Este é o script de teste que chama a função.

SELECT n,p,est FROM dbo.TableOfPrimes(50)

SELECT TOP 10 n, p, est, est/p AS factor FROM dbo.TableOfPrimes(500) ORDER BY factor DESC

SELECT TOP 10 n, p, est, est/p AS factor FROM dbo.TableOfPrimes(1000) WHERE n>500 ORDER BY factor DESC

Consulte também

Tarefas

Como: Criar e executar um CLR SQL Server usuário-definido de função

Outros recursos

Depuração de banco de dados SQL CLR