Condividi tramite


Procedura dettagliata: esecuzione del debug di una funzione con valori di tabella CLR SQL definita dall'utente

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Standard

Argomento non applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Pro e Team

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

Legenda tabella:

Argomento applicabile

Applicabile

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

In questo esempio viene illustrato come eseguire il debug di una funzione con valori di tabella CLR SQL definita dall'utente (UDF, User Defined Table-Valued Function).

Nota:

Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni attive. Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Per eseguire il debug di una funzione con valori di tabella CLR SQL definita dall'utente

  1. In un nuovo progetto SQL Server stabilire una connessione a un database. Per ulteriori informazioni, vedere Procedura: connettersi a un database.

  2. Creare una nuova funzione utilizzando il codice della prima sezione relativa agli esempi e denominarla TableOfPrimes.cs. Per ulteriori informazioni, vedere Procedura: sviluppare con il tipo di progetto SQL Server.

  3. Aggiungere uno script che provi la funzione includendola in un'istruzione SELECT. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla directory Script di test, scegliere Aggiungi script di prova e inserire il codice contenuto nella seconda sezione relativa agli esempi riportate di seguito. Salvare il file con il nome TestPrime.sql. Fare clic con il pulsante destro del mouse sul nome del file e scegliere Imposta come script di debug predefinito.

  4. Impostare i punti di interruzione in TableOfPrimes.cs, quindi scegliere Avvia dal menu Debug per compilare e distribuire il progetto, nonché per eseguirne l'unit test. Quando il puntatore all'istruzione, indicato da una freccia gialla, compare su un punto di interruzione, è in corso il debug del codice CLR SQL.

  5. Provare più funzionalità di debug.

    1. Scegliere ripetutamente Esegui istruzione dal menu Debug per osservare l'esecuzione riga per riga della funzione.

    2. Eseguendo la funzione un'istruzione alla volta, è possibile utilizzare le finestre Variabili locali ed Espressioni di controllo per osservare i valori di membri diversi.

    3. Scegliere nuovamente Continua per terminare il debug della funzione.

    4. Nella finestra Output selezionare Output database nella casella di riepilogo a discesa Mostra output di. È possibile osservare i risultati dell'esecuzione delle due query nello script TestPrimes.sql.

Esempio

Codice che legge il log eventi.

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); 
        }
    }
}

Script di prova che chiama la funzione.

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

Vedere anche

Attività

Procedura: creare ed eseguire una funzione CLR definita dall'utente di SQL Server

Altre risorse

Esecuzione del debug di database CLR SQL