通过动态SQL返回结果的存储过程不会发出列名

时间:2012-03-01 21:24:32

标签: sql linq dynamic

我有一个可能会收集数百万行的SP,此SP由Dynamic SQL生成此结果集。但是,从LINQ调用SP,LINQ无法识别此SP应返回的列。

如果我创建一个临时表,LINQ会识别但是我不确定SP是否必须先填充该TEMP表才能给出控制权,或者它与SP中的临时表没有区别。

意思是,使用临时表以便LINQ可以识别列会降低性能,还是表现得与我不使用临时表的行为不同?

如果我不使用临时表,那么LINQ无法获取列,因此这是一个窘境。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

试试这个

SET FMTONLY ON
EXEC dbo.yourProc
SET FMTONLY OFF

这就是Linq-to-Sql将如何调用你的proc以确定列名。此外,如果proc有任何参数,Linq-to-Sql将发送空值。

如果出现此错误,或者没有产生任何结果,Linq-to-Sql将无法使用proc的结果。你应该能够从这里调整它以使其运行。

答案 1 :(得分:0)

不是创建存储过程以返回结果集,而是尝试使用表值函数。

在表值函数中,您声明了预期返回的表结构,以便LINQ能够使用它。

有关表值函数的更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms191165.aspx

将它们与LINQ:http://msdn.microsoft.com/en-us/library/bb386954.aspx

一起使用

希望这有帮助!