Procedura dettagliata: esecuzione del debug di una funzione con valori di tabella CLR SQL definita dall'utente
Le informazioni contenute in questo argomento sono valide per:
Edizione |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard |
![]() |
![]() |
![]() |
![]() |
Pro e Team |
![]() |
![]() |
![]() |
![]() |
In questo esempio viene illustrato come eseguire il debug di una funzione con valori di tabella CLR SQL (Common Language Runtime SQL Server).
Se quando si tenta di eseguire il debug di un oggetto CLR SQL, viene visualizzato il messaggio "Operazione annullata dall'utente", è necessario configurare manualmente sia il computer in cui è in esecuzione Visual Studio sia il computer che esegue SQL Server. Per ulteriori informazioni, vedere Procedura: configurare i computer per l'abilitazione del debug di CLR SQL e Transact-SQL.
Nota
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere la classe Gestione delle impostazioni.
Per eseguire il debug di una funzione con valori di tabella CLR SQL definita dall'utente
In un nuovo progetto CLR SQL stabilire una connessione a un database. Per ulteriori informazioni, vedere How to: Connect to a Database.
Creare una nuova funzione utilizzando il codice della prima sezione relativa agli esempi e denominarla TableOfPrimes.cs. Per ulteriori informazioni, vedere How to: Develop with the SQL Server Project Type.
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.
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.
Provare più funzionalità di debug.
Scegliere ripetutamente Esegui istruzione dal menu Debug per osservare l'esecuzione riga per riga della funzione.
Eseguendo la funzione un'istruzione alla volta, è possibile utilizzare le finestre Variabili locali ed Espressioni di controllo per osservare i valori di membri diversi.
Scegliere nuovamente Continua per terminare il debug della funzione.
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 da cui viene chiamata 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