Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql 返回表的SQL Server 2008函数是否像存储过程一样得到优化?_Linq To Sql_Sql Server 2008_Function_Stored Procedures - Fatal编程技术网

Linq to sql 返回表的SQL Server 2008函数是否像存储过程一样得到优化?

Linq to sql 返回表的SQL Server 2008函数是否像存储过程一样得到优化?,linq-to-sql,sql-server-2008,function,stored-procedures,Linq To Sql,Sql Server 2008,Function,Stored Procedures,在做了很多年的ADO.NET弟子之后,我终于想弄明白Linq了。在Linq中,SQL Server函数返回的表数据类型为IQueryable,而存储过程返回的数据类型为ISingleResult 因为IQueryable比较容易处理,所以我想使用它。我的问题是:返回表数据的SQL函数是否与等效存储过程一样高效?对于简单查询,LINQ to SQL的性能非常好,但在执行更复杂的语句时,您会创建一个已编译的查询以供重用并提高性能 查看System.Data.Linq.CompiledQuery类 以

在做了很多年的ADO.NET弟子之后,我终于想弄明白Linq了。在Linq中,SQL Server函数返回的表数据类型为IQueryable,而存储过程返回的数据类型为ISingleResult


因为IQueryable比较容易处理,所以我想使用它。我的问题是:返回表数据的SQL函数是否与等效存储过程一样高效?

对于简单查询,LINQ to SQL的性能非常好,但在执行更复杂的语句时,您会创建一个已编译的查询以供重用并提高性能

查看
System.Data.Linq.CompiledQuery

以下链接包含一些性能测试和进一步讨论:

是的,底层代码最终将以同样的方式在TSQL中通过查询优化器,因此对于“效率等价性”,它必须是一个可靠的是。但是,有些事情对表值函数有利,特别是如果函数可以内联(函数内部的查询中使用外部过滤器)

生成结果集(或多个)的SP只能从参数中获取输入,而内联表函数可以从外部查询中引入额外的过滤器。考虑这一点:

create function dbo.testif() returns table as return
select * from information_schema.columns
以及查询

select * from dbo.testif() where TABLE_NAME like 'S%'

条件表名如“S%”实际上被带到函数内部的查询中,这是存储过程无法做到的。

Cyberwiki和Kirk的回答都帮了我的忙,但在Linq中使用存储过程似乎很尴尬。我确实发现Linq会像对待表一样对待视图,所以我可以使用视图来塑造结果,这样我仍然可以在服务器上进行大部分处理,而不是在应用程序代码中加入表


我认为,使用视图以及Linq编译查询以获得更高的性能(正如Kirk所建议的那样),可以得到我想要的结果。

存储过程返回的是什么,还有一个表?
select * from dbo.testif() where TABLE_NAME like 'S%'