【问题标题】:SQLDatasource Select Parameter causes time outSQLDatasource 选择参数导致超时
【发布时间】:2014-03-04 00:29:14
【问题描述】:

如果我运行这段代码,不到一秒就会返回结果 -

<asp:SqlDataSource ID="OrdersSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:OperationsPortal.Properties.Settings.JDEProd %>" SelectCommand="
                SELECT A.Test
                FROM PRODDTA.F5547510 AS B WITH(NOLOCK)
                INNER JOIN PRODDTA.F4211 AS A WITH(NOLOCK) ON B.SCDOCO = A.SDDOCO
                INNER JOIN PRODDTA.F0101 C WITH(NOLOCK) ON A.SDAN8 = C.ABAN8
                **WHERE (A.SDMCU = '         CHP')**
                ORDER BY ORDERDATE">
                <SelectParameters>
                    <asp:ControlParameter ControlID="drpBranch" DefaultValue="CHP" Name="BranchPlant" PropertyName="SelectedValue" />
                </SelectParameters>
            </asp:SqlDataSource>

但是,一旦我将 WHERE 语句更改为使用选择参数,查询就会超时 -

<asp:SqlDataSource ID="OrdersSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:OperationsPortal.Properties.Settings.JDEProd %>" SelectCommand="
                SELECT A.Test                      
                FROM PRODDTA.F5547510 AS B WITH(NOLOCK)
                INNER JOIN PRODDTA.F4211 AS A WITH(NOLOCK) ON B.SCDOCO = A.SDDOCO
                INNER JOIN PRODDTA.F0101 C WITH(NOLOCK) ON A.SDAN8 = C.ABAN8
                **WHERE (A.SDMCU = '         ' + @BranchPlant)**
                ORDER BY ORDERDATE">
                <SelectParameters>
                    <asp:ControlParameter ControlID="drpBranch" DefaultValue="CHP" Name="BranchPlant" PropertyName="SelectedValue" />
                </SelectParameters>
            </asp:SqlDataSource>

有谁知道我可以做些什么来解决这个问题?如果我在 Management Studio 中运行它,我会得到类似的结果,但在 Management Studio 中,我可以将“OPTION(RECOMPILE)”添加到查询的末尾并解决问题。但是,这在我的 SQLDatatSource SelectCommand 中似乎不起作用。

【问题讨论】:

    标签: c# asp.net parameters sqldatasource


    【解决方案1】:

    万一其他人遇到这个问题,我就是这样解决性能问题的。我在顶部声明了一个变量,将变量的值设置为 Select Parameter 并使用 OPTION (OPTIMIZE) -

    <asp:SqlDataSource CancelSelectOnNullParameter="False"  ID="OrdersSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:OperationsPortal.Properties.Settings.JDEProd %>" SelectCommand="
                    DECLARE @Branch varchar(12)
                    SET @Branch = @BranchPlant
                    SELECT A.Test
                    FROM PRODDTA.F5547510 AS B WITH(NOLOCK)
                    INNER JOIN PRODDTA.F4211 AS A WITH(NOLOCK) ON (A.SDDOCO = B.SCDOCO AND A.SDLNID = B.SCLNID)
                    INNER JOIN PRODDTA.F0101 C WITH(NOLOCK) ON A.SDSHAN = C.ABAN8
                    WHERE (A.SDMCU = '         ' + @Branch) 
                    OPTION (OPTIMIZE FOR (@Branch = 'CHP'))">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="drpBranch" Name="BranchPlant" PropertyName="SelectedValue" Type="String" />
                    </SelectParameters>
                </asp:SqlDataSource>
    

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多