2014-03-04 41 views
0

如果我運行這段代碼,返回結果在不到一秒鐘 - 只要我改變WHERE語句中使用一個選擇參數SqlDataSource的選擇參數導致超時

<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> 

但是,查詢超時 -

<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中工作。

回答

0

如果有人遇到這個問題,這是我最終如何解決性能問題。我聲明一個變量頂部,將變量的值設置爲選擇參數並使用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>