Объекты SQL CLR для тяжелых операций - PullRequest
1 голос
/ 20 января 2009

Вот мой сценарий:

Я реализовал заданную логику в моей среде C #. Наборы могут содержать большое количество объектов, возможно, даже до 1 миллиона в худшем случае. Предположим, что наборы просто содержат списки объектов с именем Doc. Из-за потенциального большого числа объектов я хотел бы дать разработчику возможность создавать и использовать наборы.

Для небольших наборов разработчик может просто создать новый набор и добавить в него объекты документов. Доступна нормальная логика набора, такая как объединение, пересечение и т. Д. Затем разработчик может в любой момент сохранить набор с моим слоем ИЛИ, в котором для набора будет назначен первичный идентификатор.

Для очень больших наборов, которые сохраняются в базе данных, я хотел бы обойти процесс извлечения идентификаторов объектов документов из базы данных и затем сохранения идентификаторов обратно в объект набора, позволяя манипулировать набором в SQL 2008 CLR. Я хотел бы иметь простую функцию, такую ​​как эта подпись:

public void AddSetMembers(int setID, Expression<Func<Doc, bool>> Where)

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

Мой вопрос: как лучше подходить к этой реализации в хранимой процедуре? Можно ли как-то передать лямбду в хранимую процедуру? Я думал о реализации интерфейса IDoc и загрузке его в CLR и наличии такой подписи, как:

public void AddSetMembers(int setID, Expression<Func<IDoc, bool>> Where)

однако мне все равно нужно было бы передать лямбду SP. Я хочу сделать инфраструктуру достаточно гибкой, чтобы разработчик мог использовать различные условия для создания наборов.

1 Ответ

1 голос
/ 20 января 2009

Вы можете передать строку из вашего SQL в ваш метод SQL CLR, содержащий лямбду. Затем скомпилируйте эту строку в функцию / метод, используя инструменты компиляции платформы, и затем вызовите ее.

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