Sql server 带有where参数的SQL Server动态交叉TB查询

Sql server 带有where参数的SQL Server动态交叉TB查询,sql-server,Sql Server,在下面的动态查询中,我得到了这个错误 必须声明标量变量“@κωδκατηγ2” 当在@query中设置时,其中(κωδuκατηγ=@κωδuκατηγ2) 如果设置,其中(κωδuκατηγ=1)工作正常 我怎样才能消除这个错误 如何将控制参数@κωδκατηγ2的值传递给@查询 <asp:SqlDataSource ID="apotelesmata_diast_db" runat="server" ConnectionString='<%$ ConnectionStr

在下面的动态查询中,我得到了这个错误

必须声明标量变量“@κωδκατηγ2”

当在
@query
中设置
时,其中(κωδuκατηγ=@κωδuκατηγ2)

如果设置
,其中(κωδuκατηγ=1)
工作正常

我怎样才能消除这个错误

如何将
控制参数
@κωδκατηγ2的值传递给
@查询

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

更改此部分:

'WHERE (κωδ_κατηγ = @κωδ_κατηγ2)'
关于这一点:

'WHERE (κωδ_κατηγ = ' + CAST(@κωδ_κατηγ2 as nvarchar(10)) + ')'
执行动态查询时出错。它无法获取不属于动态查询的变量。

更改此部分:

'WHERE (κωδ_κατηγ = @κωδ_κατηγ2)'
关于这一点:

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

执行动态查询时出错。它无法获取不属于动态查询的变量。

您可以使用paramdef向动态查询发送参数

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

可以使用paramdef将参数发送到动态查询

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

太好了,这很有帮助!请随时接受/投票选出对您有帮助的答案!祝你好运太好了,这很有帮助!请随时接受/投票选出对您有帮助的答案!祝你好运