Я пишу хранимую процедуру С#, которая развернута на SQL Server 2008 R2 (так .Net 3.5) и хочу объявить необязательный параметр как nullable guid. Вот что я пробовал первым:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void spCalcPerc(
SqlGuid pID
, SqlGuid sID = DBNull.Value
)
Это не удалось с ошибкой времени компиляции:
Значение параметра по умолчанию для 'sID' должно быть константой времени компиляции
потому что DBNull.Value
не является константой, которая является болью.
Поэтому я попытался изменить объявление на:
[Microsoft.SqlServer.Server.SqlProcedure]
public static void spCalcPerc(
SqlGuid pID
, Guid? sID = null
)
Это компилируется, но теперь я получаю эту ошибку развертывания:
Ошибка развертывания: не удалось создать тип для параметра System.Nullable
Попытка:
, SqlGuid sID = null
Дает эту ошибку времени компиляции:
Значение типа '<null> 'не может использоваться как параметр по умолчанию, потому что нет стандартных преобразований для типа 'System.Data.SqlTypes.SqlGuid'
Так что, чувствуя себя довольно застрявшим, я прибегал к этому:
, SqlGuid sID = "00000000-0000-0000-0000-000000000000"
Что я не хотел делать, так как тестирование этой строки в коде выглядит как kludge. Однако это не работает, поскольку я получаю эту ошибку компиляции:
Значение типа 'string' не может использоваться как параметр по умолчанию, потому что нет стандартных преобразований для типа 'System.Guid'
Gah, 4 разных подхода, и никто из них не работает. Вздох
Поблагодарите ваши мысли или толчок в правильном направлении, пожалуйста.