2016-05-14 45 views
1

在下面的動態查詢我得到這個錯誤SQL服務器動態crosstb查詢與在參數

必須聲明標量變量「@κωδ_κατηγ2」

@query設置WHERE (κωδ_κατηγ = @κωδ_κατηγ2)時。

如果設置WHERE (κωδ_κατηγ = 1)工作正常。

我該如何解決這個錯誤?

如何將值從ControlParameter @κωδ_κατηγ2傳遞到@query

<asp:SqlDataSource ID="apotelesmata_diast_db" runat="server" 
    ConnectionString='<%$ ConnectionStrings:epsa_mssql %>' 
    SelectCommand="DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)     

    SELECT @cols = STUFF((SELECT ',' + QUOTENAME(Ομάδα1) FROM (SELECT κωδ_κατηγ, Ομάδα1 FROM [2014_2015].[αποτελεσματα_ερ2]) d 
      WHERE (κωδ_κατηγ = @κωδ_κατηγ1) GROUP BY κωδ_κατηγ, Ομάδα1 ORDER BY Ομάδα1 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 

    SET @query = 'SELECT Ομάδα2,' + @cols + ' 
     from 
     (select κωδ_κατηγ, Ομάδα1, Ομάδα2, Σκορ 
      from [2014_2015].[αποτελεσματα_ερ2] pd 
      WHERE (κωδ_κατηγ = @κωδ_κατηγ2) 
      GROUP BY κωδ_κατηγ, Ομάδα1, Ομάδα2, Σκορ) x    
     pivot 
     (max(Σκορ) for Ομάδα1 in (' + @cols + ')) p '     
      EXEC sp_executesql @query;"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="katigoties_ddl" 
       PropertyName="SelectedValue" Name="κωδ_κατηγ1" Type="Int16"> 
     </asp:ControlParameter> 
     <asp:ControlParameter ControlID="katigoties_ddl" 
       PropertyName="SelectedValue" Name="κωδ_κατηγ2" Type="Int16"> 
     </asp:ControlParameter>      
    </SelectParameters> 
</asp:SqlDataSource> 

回答

0

變化這一部分:

'WHERE (κωδ_κατηγ = @κωδ_κατηγ2)' 

在此:

'WHERE (κωδ_κατηγ = ' + CAST(@κωδ_κατηγ2 as nvarchar(10)) + ')' 

執行動態查詢時會出現錯誤。它不能得到一個不屬於動態查詢的變量。

+0

非常感謝我的朋友的作品完美 – lammis

+0

大它幫助!請自由接受/ upvote幫助你的答案!祝你好運! – gofr1

0

您可以使用發送參數來動態查詢paramdef

declare @paramdef nvarchar(max) = N'@κωδ_κατηγ2 int, @κωδ_κατηγ1 int'; 
EXEC sp_executesql @query, @paramdef, @κωδ_κατηγ[email protected]κωδ_κατηγ1, @κωδ_κατηγ[email protected]κωδ_κατηγ2; 
+0

非常感謝,完美的作品 – lammis