在 sqldatasource (aspnet) 中声明表变量

本文关键字:声明 变量 sqldatasource aspnet | 更新日期: 2023-09-27 17:56:42

我有一个查询,我在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中的问题。

谢谢大家!

在 sqldatasource (aspnet) 中声明表变量

尝试创建一个存储过程,如下所示:

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>

仅仅将声明的表转换为临时表是不值得

的,即
CREATE TABLE #tableVariable (fecha DATE, valor Float)

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

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