用于繁重操作的SQL CLR对象

时间:2009-01-19 23:25:39

标签: sql-server linq linq-to-sql sql-server-2008 clr

以下是我的情景:

我在C#框架中实现了set logic。集合可以包含大量对象,在最坏的情况下甚至可能高达100万。假设集只包含名为Doc的对象列表。由于潜在的大量对象,我想让开发人员选择如何创建和使用集合。

对于较小的集合,开发人员可以只创建一个新集合并将doc对象添加到集合中。正常设置逻辑可用,例如union,intersect等。然后,开发人员可以在任何时候使用我的OR层保存集合,其中集合将为其分配主ID。

对于持久存储在数据库中的非常大的集合,我想绕过从数据库中提取doc对象的ID的过程,然后通过允许操作集合中的集合来将ID保存回集合对象中。 SQL 2008 CLR。我想有一个简单的功能,如这个签名:

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

这将允许开发人员将任意文档添加到与Expression匹配的集合中,而不从数据库中提取所有ID,其唯一目的是将它们添加到集合中。

我的问题是如何最好地在存储过程中实现此实现?我可以以某种方式将lambda传递给存储过程吗?我曾考虑过实现一个IDoc接口并将其加载到CLR中,并具有如下签名:

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

但是我仍然需要将lambda传递给SP。我想使框架足够灵活,以便开发人员可以使用不同的条件来创建集合。

1 个答案:

答案 0 :(得分:1)

您可以将SQL中的字符串传递给包含lambda的SQL CLR方法。然后使用框架的编译工具将该字符串编译成函数/方法,然后调用它。