如何获取C#查询组件以识别从sql存储过程中的临时表返回的列的数据

Asked
Viewd950

4

我已经创建了一个与以下存储过程类似的存储过程(我正在使用此简化版本来尝试解决问题)。

 CREATE PROCEDURE bsp_testStoredProc
AS
BEGIN

CREATE TABLE #tmpFiles  
(
    AuthorName NVARCHAR(50), 
    PercentageHigh INT
) 

-- Insert data into temp table

SELECT AuthorName, PercentageHigh FROM #tmpFiles 
ORDER BY PercentageHigh DESC

DROP TABLE #tmpFiles

RETURN 0
END
 

从VS2008中的C#代码中,我试图将Query组件与使用现有存储过程选项一起使用,以将其连接到DataTable / DataGridView以显示结果。

但是,由于我正在从临时表中进行选择,因此在Query组件属性中,Visual Studio不会显示从存储过程返回的任何列。我认为由于SP不是基于真实的架构,因此无法确定正在使用的数据类型。

连接到从实际表中选择的不同存储过程确实可以正确显示列。

有人知道吗?我可以在某处添加一些提示以明确声明将返回哪种数据吗?

谢谢。

1 个答案

1

有关信息,您可以考虑使用“表变量”而不是临时表(即@FOO而不是#FOO)-这可能会有所帮助,并且肯定会解决一些tempdb问题。

对于临时表-没有办法明确声明SP模式。我可能会建议在生成包装类时使用SP的简化版本-即让它对正确形状进行琐碎的SELECT。

或者,我将使用LINQ来使用UDF,而确实具有明确的架构。

  • 很好-我将坚持使用table变量,因为不需要索引。感谢您的建议。

    John SiblyOctober 15, 2008 12:19
  • 临时表没有像表变量那样紧密地绑定到SP模式中,因此FMTONLY开关很可能在表变量方面做得更好……很高兴,虽然;-p

    Marc GravellOctober 15, 2008 10:56
  • 切换到表变量有效。我仍然感到困惑,为什么临时表和表变量的行为应该有所不同。谢谢,约翰

    John SiblyOctober 15, 2008 10:25
  • 此外-表变量不会导致重新编译等,因此值得为此而进行切换(假设您不必索引#table)

    Marc GravellOctober 15, 2008 10:58