无法解决:'必须声明标量变量" @参数"`'

时间:2015-06-19 17:09:20

标签: sql sql-server parameters pivot scalar

我需要在存储过程中的下面的pivot中输入一个参数。但它表示,"必须声明标量变量" @ pWeek"。"

我试图以各种方式宣布它,但我无法弄清楚这一点。 其他一切都很好,因为我得到了我想要的数字,我想要的方式。我只需要能够将其放入SSRS并能够输入参数。谢谢。

GO
/****** Object:  StoredProcedure [dbo].[QB_ACCOUNT_SUMMARY]    Script Date: 6/19/2015 12:42:12 PM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[QB_ACCOUNT_SUMMARY]

@pWeek int

as
SET NOCOUNT ON

declare @AccountRef_Fullname AS  NVARCHAR(MAX)



select  @AccountRef_Fullname = COALESCE(@AccountRef_Fullname + ',', '') + '['+ AccountRef_Fullname + ']'

from 
(
select distinct Accountref_fullname 
from (select accountref_fullname from journalcreditlinedetail)JournalCreditLine
union
(select accountref_fullname from journaldebitlinedetail)
union
(select accountref_fullname from txnexpenselinedetail)
union
(select accountref_fullname from depositlinedetail)
union
(select discountaccountref_fullname from [appliedtotxndetail])
) pAccountRef_Full_Name


declare  @Sql NVARCHAR(MAX)


set @Sql = N' SELECT [REAL WEEK], [LTWS WEEK], [REAL YEAR], [LTWS YEAR], [LTWS PERIODS], ' + @AccountRef_Fullname 

+ 'from 

(SELECT     * from Account_Summary_View
where Week = @pWeek
   )Account_Data '

+'  PIVOT ('
+ '  sum(amount)   for   AccountRef_FullName in ('+ @AccountRef_Fullname +')'
+'  )  AS PivotTable '


--+' )Data '
 exec (@Sql)

 ;

1 个答案:

答案 0 :(得分:4)

改变这个:

where Week = @pWeek

对此:

where Week = ''' + CAST(@pWeek AS varchar(31)) + '''

说明:您正在使用动态sql;将包含SQL命令的字符串放在一起然后执行它。该动态字符串无法访问在其自身之外声明的参数和变量。所以它无法识别@pWeek参数。你没有在动态sql字符串中声明它。

当你按照我向你展示的方式进行操作时,你将@pWeek的值连接到字符串中,这样,例如,如果你将1的值传递给@pWeek,那么得到的字符串执行将包含where Week = '1',SQL无需理解。

您已经在现有代码中使用此行完成了此操作:

 AccountRef_FullName in ('+ @AccountRef_Fullname +')'