2011-12-17 52 views
4

非常简要背景: 我们正在使用CLR存储过程来应用访问控制,使用Active Directory,对查询结果来限制哪些最终用户可以据此看到。简而言之,这是通过从用户不满足访问结果条件(本例中为文档)的数据表中移除行来完成的。T-SQL存储过程

这种过滤先前显示结果之前在客户端完成。 SQL 2008和更强大的服务器是将此访问过滤从客户端移出的动机。

我想知道的是,从CLR存储过程的等价物中调用原始的常规T-SQL存储过程是否有任何性能优势,而不是将“内联”T-SQL传递给命令对象在这种情况下,它就是原来的T-SQL,它是一个存储过程)?我无法找到任何有人提到过的地方(部分原因可能是因为CLR SPs的例子会让人感到困惑,我猜:-))。 在我看来,你可能,因为T-SQL存储过程已经被优化和编译?

是任何人都可以证实这一点给我吗?

希望我已经清楚。非常感谢,

科尔姆。

回答

0

如果您的SQL CLR存储过程执行了特定的查询(很好地参数化)并且执行得相当频繁,那么该T-SQL查询将在整个“确定最优执行计划”序列中运行一次,然后存储在您的SQL Server的计划缓存中(并且不会比类似的T-SQL存储过程快)。

这样,将是多么的“预编译”你原来的T-SQL存储过程。从这个角度来看,我没有看到任何好处。

如果你可以从你的SQL CLR过程中调整你的SQL语句,以至于它实际上甚至不会将那些行包括到你最终抛弃的结果集中,那么你的SQL-CLR执行正确参数化T-SQL查询的存储过程甚至可能比使用标准T-SQL存储过程返回需要再次排除某些行的太多数据快一点。

+0

这很有道理。我会研究调整SQL语句。也许我可以将SID传递给T-SQL查询本身,因为它们已经可用于CLR SP中查询结果的筛选。非常感谢您的帮助Marc。 – Colm 2011-12-17 21:16:20