Я думаю, что это кажется, что это могло быть сделано с помощью пакеты SSIS . Они подобны пакетам DTS 2000-х SQL. Я использовал их для успешного преобразования всего из файлов CSV простого текста от существующих таблиц SQL, и даже из файлов XLS с 6-разрядными строками, заполненными через несколько рабочих листов. Вы могли использовать C# для преобразования данных в разрешенный к ввозу формат (CSV, XLS, и т.д.), затем иметь SQL-сервер, выполняет запланированное задание SSIS для импорта данных.
довольно легко создать пакет SSIS, существует созданный мастер - в инструмент Enterprise Manager SQL Server (маркировал "Import Data", я думаю), и в конце мастера это дает Вам опцию сохранения его как пакет SSIS. Существует набор больше информации на Technet также.
Интересным решением является использование полиморфного варианта:
type bexp =
[ `And of bexp * bexp
| `Or of bexp * bexp
| `Xor of bexp * bexp
| `Not of bexp ];;
type nbexp = [ bexp | `Nop of nbexp ];;
Обратите внимание, что полиморфные варианты сложнее обычных, но допускают расширение типа.
Интересный пример вычисления выражения с расширением , используя полиморфный вариант, можно найти в тестовых каталогах исходного кода ocaml, см. svn
Эй, это должны быть алгебраические типы данных, верно?
Верно. А алгебраические типы данных состоят из помеченных (также называемых размеченными) объединений и произведений. Вам нужно просто (без тегов) объединение, которое не является алгебраическим типом данных и не поддерживается Haskell. OCaml имеет полиморфные варианты (см. Другие ответы).
Типизированная схема действительно поддерживает объединения без тегов, так что вы можете проверить ее.
Как вы сами правильно догадались, это невозможно в алгебраических типах. Я согласен с предложением Апокалиспа, что вы можете просто обернуть «унаследованную» часть nbexp
в отдельный конструктор.
Я бы добавил, что отсутствие наследования алгебраических типов является частью их чудесности. Это означает, что такое выражение, как And (foo, bar)
, типизировано неоднозначно, и что приведение типов (вверх или вниз) не играет никакой роли в системе типов. Это обеспечивает большую безопасность и большую ясность. Конечно, от программиста требуется, чтобы он / она явно обрабатывал случаи, когда он / она хочет взаимодействовать с частями bexp
из nbexp
, но если подумать, это как на практике реализуется повышенная безопасность и ясность.