在sqldatasource(aspnet)中声明表变量

时间:2013-01-30 08:19:38

标签: c# asp.net sql-server sqldatasource

我在Microsoft SQL Server Management Studio中尝试了一个查询,这个查询工作正常:

DECLARE @tableVariable TABLE (fecha DATE, valor Float);
INSERT @tableVariable SELECT fecha, valor FROM table1;
SELECT * FROM @tableVariable

当我去VisualStudio并在sqldatasource中粘贴此查询时,无法正常工作。

任何人都可以帮助我?

由于

解决

最后,问题解决了将标记<SelectParameters> <asp:Parameter Name = "tableVariable" /> </SelectParameters>删除到sqldatasource。

感谢所有人!

3 个答案:

答案 0 :(得分:2)

尝试创建stored procedure,如下所示:

CREATE PROCEDURE ComplexQuery
as
    DECLARE @tableVariable TABLE (fecha DATE, valor Float);
    INSERT @tableVariable SELECT fecha, valor FROM table1;

    -- more complex logic in here

    SELECT * FROM @tableVariable

go

然后,在您的数据源中指定过程的名称。

示例:

        <asp:SqlDataSource
            id="SqlDataSource1"
            runat="server"
            ConnectionString="..."
            SelectCommandType="StoredProcedure"                
            SelectCommand="ComplexQuery">
        </asp:SqlDataSource>

答案 1 :(得分:1)

将声明的表转换为临时表,即

是不值得的
CREATE TABLE #tableVariable (fecha DATE, valor Float)

稍后您需要一个DROP TABLE #tableVariable以确保您正在清理内存,但它会产生我认为的预期效果。

答案 2 :(得分:0)

我认为您不应该对SqlDataSource进行长而复杂的查询 - 这实际上是将表或视图绑定到数据网格而不必在后面的代码中乱七八糟。如果要运行复杂查询,则应设置存储过程以执行此操作并从SqlCommand调用该查询,或将查询文本放入SqlCommand。无论哪种方式,我都不认为SqlDataSource是这里的方式。