2012-05-07 2 views
0

Я работаю над преобразованием довольно сложной программы .NET WinForms в полностью интегрированный набор sprocs и функций SQL Server.Интеграция SQL CLR - определение функции Параметр Тип

Я работаю над сторонней базой данных, над которой у меня есть no управления вообще.

Уникальные идентификаторы, используемые в этой базе данных, являются numeric(21). Не имеет значения, хорошая ли это идея или нет ... Я должен работать в этом ограничении.

У меня возникли проблемы с определением способов кодирования функций, которые используют эти значения. До сих пор я использую System.Decimal, чтобы сделать это, что, похоже, отлично работает, когда код вызывается из самой DLL.

В SSMS, однако, когда я проверяю любую из функций, тип данных входных параметров составляет numeric(18,0). Я предполагаю, что предполагается, что на основе типа System.Decimal, но это неправильно. И конечный результат в том, что, когда я пытаюсь вызвать функцию вручную (в SSMS), я получаю следующее сообщение об ошибке:

Arithmetic overflow error converting numeric to data type numeric.

Странная вещь, что звонки НЕ неудачу, когда я звоню функции из .dll. Как я могу переопределить обозначение numeric(18,0)?

ответ

0

Человек, я ненавижу, когда дальнейший поиск в Google находит ответ, как через 30 секунд после того, как я поставил вопрос !!!

Я клянусь, я смотрел на это в течение нескольких дней ...

Во всяком случае, мне нужно, чтобы добавить SqlFacet к моему входному параметру.

Я пошел от этого:

<Microsoft.SqlServer.Server.SqlProcedure()> 
Public Shared Sub Check(ByVal ID As Decimal) 

Для этого:

<Microsoft.SqlServer.Server.SqlProcedure()> _ 
Public Shared Sub Check(<SqlFacet(Precision:=21, Scale:=0)> ByVal ID As Decimal)