Demonstra Passo a passo: Depurar uma função de Table Valued definido pelo usuário CLR de SQL
Este tópico se aplica a:
Edition |
Visual Basic |
C# |
C++ |
Desenvolvedores Web |
---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard |
![]() |
![]() |
![]() |
![]() |
Pro e equipe |
![]() |
![]() |
![]() |
![]() |
Este exemplo mostra como depurar um SQL Server User Defined Table-Valued de Common Language Runtime (CLR SQL) função (UDF).
Se, quando você tentar depurar um objeto CLR em SQL, a mensagem "Cancelada pelo usuário" aparece, você deve configurar manualmente o computador no qual você está executando Visual Studio , bem como o computador que está executando o SQL Server. Para obter mais informações, consulte Como: Configurar seus computadores para habilitar o Transact-SQL e depuração de CLR de SQL.
![]() |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Para depurar uma função de valor de tabela definidos pelo usuário CLR de SQL
Em um novo projeto de SQL de CLR, estabelecer uma conexão a um banco de dados. Para obter mais informações, consulte How to: Connect to a Database.
Crie uma nova função usando o código da primeira seção do exemplo abaixo e o nome TableOfPrimes.cs. Para obter mais informações, consulte How to: Develop with the SQL Server Project Type.
Adicionar um script que testa a função incluindo-o em um SELECT instrução. Em Solution Explorer, com o botão direito do TestScripts directory, clique em Add Test Scripte insira o código da segunda das seções de exemplo a seguir. Salve o arquivo com o nome TestPrime.sql. Clique com o botão direito no nome do arquivo e, em seguida, clique em Set as Default Debug Script.
Definir pontos de interrupção de TableOfPrimes.cs e em seguida, o Debug menu, clique em Iniciar para compilar, implantar e o projeto de teste de unidade. Quando o ponteiro de instrução, designado por uma seta amarela, aparece em um ponto de interrupção, você está depurando o código de SQL de CLR.
Experimente recursos de depuração diferentes.
Sobre o Debug menu, clique em Step Into repetidamente para observar a linha por linha de execução da função.
Conforme você avança por meio da função, você pode usar o Locals e Watch windows para observar os valores dos membros de diferentes.
Clique em continuar novamente para concluir a depuração da função.
No saída janela, selecione Banco de dados de saída da Show output from na lista suspensa e você pode observar os resultados da execução de duas consultas no script TestPrimes.sql.
Exemplo
Este é o código que lê o Log 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