添加到存储过程时出现数据透视查询错误,但在查询生成器中运行正常 window
Pivot query error when added to a stored procedure, but runs OK in query builder window
当我 运行 作为常规查询 SQL 时,它 运行 没问题,我得到了正确的结果。现在,我想通过让用户添加一些日期(例如@dtFROM 和@dtTO 日期)来使此查询动态化。这些是我的应用程序中的用户供应日期。现在,我正在尝试在 SQL 服务器中创建一个存储过程到 运行 这个,但这些是关于“)”的错误放置。我已经查看了查询的这个和测试部分,但没有成功。
CREATE PROCEDURE dbo.[usp_Cleaner_KG_per_Date]
@dtFrom datetime,
@dtTo datetime
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query VARCHAR(4000)
DECLARE @Packdate VARCHAR(2000)
SELECT @Packdate = STUFF(( SELECT DISTINCT
'],[' + ((LEFT(CONVERT(VARCHAR, PackDate, 120), 10)))
FROM vw_CleanerSummary2015 where (PackDate >= @dtFROM) and (Packdate <= @dtTO)
ORDER BY '],[' + ((LEFT(CONVERT(VARCHAR, PackDate, 120), 10)))
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = 'SELECT * FROM
(
SELECT ID,KG,PackDate
FROM vw_CleanerSummary2015
GROUP BY Packdate,ID,[KG/HR]
)t
PIVOT (sum(KG) FOR Packdate
in ('+@Packdate+')) AS pvt'
EXECUTE (@query)
如果这是您所有的程序代码,问题很可能是您在 execute
之后缺少结尾 END
以匹配开头 BEGIN
。
当我 运行 作为常规查询 SQL 时,它 运行 没问题,我得到了正确的结果。现在,我想通过让用户添加一些日期(例如@dtFROM 和@dtTO 日期)来使此查询动态化。这些是我的应用程序中的用户供应日期。现在,我正在尝试在 SQL 服务器中创建一个存储过程到 运行 这个,但这些是关于“)”的错误放置。我已经查看了查询的这个和测试部分,但没有成功。
CREATE PROCEDURE dbo.[usp_Cleaner_KG_per_Date]
@dtFrom datetime,
@dtTo datetime
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query VARCHAR(4000)
DECLARE @Packdate VARCHAR(2000)
SELECT @Packdate = STUFF(( SELECT DISTINCT
'],[' + ((LEFT(CONVERT(VARCHAR, PackDate, 120), 10)))
FROM vw_CleanerSummary2015 where (PackDate >= @dtFROM) and (Packdate <= @dtTO)
ORDER BY '],[' + ((LEFT(CONVERT(VARCHAR, PackDate, 120), 10)))
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = 'SELECT * FROM
(
SELECT ID,KG,PackDate
FROM vw_CleanerSummary2015
GROUP BY Packdate,ID,[KG/HR]
)t
PIVOT (sum(KG) FOR Packdate
in ('+@Packdate+')) AS pvt'
EXECUTE (@query)
如果这是您所有的程序代码,问题很可能是您在 execute
之后缺少结尾 END
以匹配开头 BEGIN
。