在下面的动态查询中,我收到此错误
必须声明标量变量“@κωδ_κατηγ2”
在WHERE (κωδ_κατηγ = @κωδ_κατηγ2)
。
@query
时
如果设置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 :(得分:0)
更改此部分:
'WHERE (κωδ_κατηγ = @κωδ_κατηγ2)'
关于这个:
'WHERE (κωδ_κατηγ = ' + CAST(@κωδ_κατηγ2 as nvarchar(10)) + ')'
执行动态查询时发生错误。它无法获得一个不属于动态查询的变量。
答案 1 :(得分:0)
您可以使用paramdef
将参数发送到动态查询declare @paramdef nvarchar(max) = N'@κωδ_κατηγ2 int, @κωδ_κατηγ1 int';
EXEC sp_executesql @query, @paramdef, @κωδ_κατηγ1=@κωδ_κατηγ1, @κωδ_κατηγ2=@κωδ_κατηγ2;