Valores de parâmetro padrão / parâmetros opcionais para procedimentos armazenados do .NET no SQL Server 2005

SQL Server um procedimento armazenado escrito em c # na estrutura do .NET 2.0 que possui um parâmetro SqlInt32. Eu estou tentando fazer o parâmetro opcional. Aqui está um caso de teste mínimo que apenas imprime o inteiro passado para ele:

[Microsoft.SqlServer.Server.SqlProcedure]
public static void TestProc(
    SqlInt32 TestInt
    )
{
    SqlPipe pipe;
    pipe = SqlContext.Pipe;

    if (TestInt.IsNull)
    {
        pipe.Send("NULL value passed");
    }
    else
    {
        pipe.Send(TestInt.ToString());
    }
}

Esses comandos são executados conforme o esperado e são impressos "1" e "NULL value passed", respectivamente:

exec dbo.TestProc @TestInt = 1
exec dbo.TestProc @TestInt = null

No entanto, meu objetivo é atribuir um padrão de NULL a @TestInt, o que me permitiria executar apenas este comando:

exec dbo.TestProc

Não consigo encontrar uma maneira de fornecer um valor padrão para o parâmetro dentro do código .NET. Pelo que pude encontrar pesquisando, o .NET 4.0 suportará parâmetros opcionais, portanto, presumivelmente, o .NET 2.0 não. E (ingenuamente) alterando a declaração de parâmetros como esta, fornece o erro "especificadores de parâmetro padrão não são permitidos":

SqlInt32 TestInt = SqlInt32.Null

Eu também tentei sobrecarregar o método adicionando este código:

public static void TestProc()
{
    SqlInt32 intNull;
    intNull = SqlInt32.Null;
    TestProc(intNull);
}

Isso compila de forma limpa, mas não pode ser implantado: o VS mostra o erro "Métodos, propriedades ou campos sobrecarregados não são suportados". Então, neste momento, estou preso.

O caso de uso real é, obviamente, mais complexo: é um módulo de log do TSQL que chama procedimentos armazenados para manipular mensagens de log. O procedimento de manipulação é identificado dinamicamente em tempo de execução, e o código de chamada não sabe se está chamando um proc TSQL ou .NET. Isso requer todos os procedimentos para suportar os mesmos parâmetros e vários são opcionais. O código de chamada já está em produção, por isso estou tentando evitar alterá-lo para passar todos os parâmetros em todas as chamadas. No TSQL procs, não é um problema porque os parâmetros opcionais são fáceis, mas aparentemente não no .NET.

questionAnswers(1)

yourAnswerToTheQuestion