【问题标题】:Unable to resolve: 'Must declare the scalar variable "@Parameter"`'无法解决:'必须声明标量变量“@Parameter”`'
【发布时间】:2015-09-05 18:16:02
【问题描述】:

我需要在存储过程下面的数据透视表中输入一个参数。但它声明,“必须声明标量变量“@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)

 ;

【问题讨论】:

  • 您正在创建动态 SQL,您是否记得在字符串之外声明和使用变量(就像您使用 AccountRef_Fullname 所做的那样)?此外,我在您的 proc 定义中看不到任何参数。
  • 我已经更新了原始代码以显示@pWeek 参数以及我尝试实现它的一种方式。但我总是收到同样的错误信息。我正在尝试使用它,以便参数可以链接到用户在通过 SSRS 查看时输入的内容。

标签: sql sql-server parameters pivot scalar


【解决方案1】:

改变这个:

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 +')'

【讨论】:

  • 哦,你是一个美丽的人!能否麻烦您解释一下这是如何以及为什么起作用的,以便我更好地理解?
  • 为我的回答添加了更多解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
相关资源
最近更新 更多