Пользовательский тип для 64-разрядного значения без знака против NUMERIC (20,0) - PullRequest
3 голосов
/ 25 мая 2011

Допустим, я хочу создать таблицу, в которой есть несколько столбцов, которые я хочу содержать 64-разрядные целые числа без знака. Я могу сделать это несколькими различными способами, некоторые из которых могут быть недействительными или иметь последствия:

  1. Используйте NUMERIC(20,0) и добавьте проверочное ограничение, которое гарантирует, что значение не является отрицательным и находится в пределах 64-разрядного целого числа без знака (т. Е.,> = 0 и <18,446,744,073,709,551,616). Кроме того, логика проверочного ограничения может быть заключена в UDF, чтобы избежать избыточности. </li>
  2. Создайте пользовательский тип CLR, который инкапсулирует эту логику (и, в конечном счете, оборачивает System.UInt64). Используйте тип для обоих типов столбцов и параметров хранимой процедуры. Может ли такой тип дать мне большую возможность (например, предотвращая передачу недопустимых значений в хранимый процесс на сайте вызова)?
  3. Повторно использовать тип BCL System.UInt64. Будет ли это вообще возможно?

Я ищу человека, обладающего знаниями в области возможностей / интеграции SQLCLR, чтобы оценить мои идеи, приведенные выше, и прокомментировать лучший ход действий.

Спасибо

1 Ответ

0 голосов
/ 25 мая 2011

Используйте числовое значение (20,0) и проверочное ограничение, чтобы ограничить 0 <= x <= 18446744073709551615 (исправлено при редактировании)

В SQL Server нет знака без знака 64, а целого числа, поэтому вам придется выполнить некоторую логику вклиент, чтобы он выглядел int не десятичный

Верхний контрольный предел необходим, потому что 19E18 больше чем 64 без знака, но ОК для числового (20,0).Это может быть нежелательно, если значения БД переполняются и прерываются в клиенте.

И если вы решите, что вам нужны дополнительные несколько нулей, вы можете изменить значение на numeric (23, 0) или выше ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...