Sql server 2008 r2 T\u SQL无法绑定多部分标识符错误
我有一个运行良好的查询,但我正在尝试从中创建一个动态透视,以获得更好的最终结果表 我发现这件衣服穿得很好,但我不能把它和我的问题联系起来。 我的工作代码是:Sql server 2008 r2 T\u SQL无法绑定多部分标识符错误,sql-server-2008-r2,pivot,Sql Server 2008 R2,Pivot,我有一个运行良好的查询,但我正在尝试从中创建一个动态透视,以获得更好的最终结果表 我发现这件衣服穿得很好,但我不能把它和我的问题联系起来。 我的工作代码是: DECLARE @RangeDate as date set @RangeDate = (select distinct cd.weDate from CM_DATA cd where cd.year = 2015 and cd.week = 45) set @RangeDate = DATEADD(WW, -7, @RangeDate)
DECLARE @RangeDate as date
set @RangeDate = (select distinct cd.weDate from CM_DATA cd where cd.year = 2015 and cd.week = 45)
set @RangeDate = DATEADD(WW, -7, @RangeDate)
DECLARE @SQL as VARCHAR(MAX)
DECLARE @Columns AS VARCHAR(MAX)
SELECT @Columns =
COALESCE(@Columns + ', ','') + QUOTENAME(YearWeek)
FROM
(
SELECT DISTINCT YearWeek
FROM CM_DATA
where weDate >= @RangeDate
) AS B
SET @SQL = '
WITH PivotData AS
(
select cd.Country
, cd.Chain
, cd.YearWeek
, left(sm.Planogram, 2) as planogram
, cd.StoreNo
, cd.UID
, cd.ShortCode
, lp.Family
, lp.ColourShort
, pr.type
, cd.Volume
, ul.WOSOR
from vw_V2_UsrVarLst ul
left join CM_DATA cd on cd.Country = ul.CountryCode and cd.Chain = ul.Chain
left join V2_StoreMaster sm on sm.CountryCode = ul.CountryCode and sm.Chain = ul.Chain and sm.StoreNo = cd.StoreNo and sm.StoreNm = cd.StoreNm and cd.YearWeek between sm.YYYYWW and sm.YYYYWWEND
left join tblProducts pr ON pr.[COUNTRY CODE] = ul.CountryCode and pr.SKU = cd.UID
left join V2_LanguagePack LP ON LP.ShortCode = cd.ShortCode AND lp.Lang = ul.UsrLang
where cd.Country = ul.CountryCode and cd.Chain = ul.Chain and planogram is not null and left(cd.UID, 10) in (select lv.UID from V2_live lv where lv.CountryCode = ul.CountryCode and lv.Chain = ul.Chain and cd.YearWeek between lv.YYYYWW and lv.YYYYWWEND) and cd.weDate >= ' + @RangeDate + ' and sm.Planogram != ''Z''
)
select cd.Country
, cd.Chain
, left(sm.Planogram, 2) as planogram
, cd.StoreNo
, cd.UID
, cd.ShortCode
, lp.Family
, lp.ColourShort
, pr.type
, cd.Volume
, ' + @Columns + '
, ul.WOSOR
FROM PivotData
PIVOT
(
SUM(Volume)
FOR YearWeek
IN(' + @Columns + ')
) AS PivotResult'
EXEC (@SQL)
有人能认出上面是什么吗
韩元
Martin尝试
选择@SQL
而不是EXEC
您可能必须将输出设置为文本,并使用查询选项(右键单击查询窗口)将文本输出的最大长度设置为更高的值(最大值为8192)
然后,您可以将动态SQL的结果粘贴到一个新的查询窗口中并在那里执行。您应该会收到一条语音错误消息,您甚至应该双击鼠标跳到正确的位置
祝你好运 尝试选择@SQL
而不是EXEC
您可能必须将输出设置为文本,并使用查询选项(右键单击查询窗口)将文本输出的最大长度设置为更高的值(最大值为8192)
然后,您可以将动态SQL的结果粘贴到一个新的查询窗口中并在那里执行。您应该会收到一条语音错误消息,您甚至应该双击鼠标跳到正确的位置
祝你好运 好的,看起来生成的T-SQL太长了。当我使用你的方法时,我得到查询的一部分出现在消息选项卡中,并显示一条错误消息,其中第四个左连接被截断了一半。这正是我所说的。。。我想你是在SSMS工作。只需在查询窗口中单击鼠标右键并选择“选项”。在那里你可以找到文本
,还有一些默认设置为256的最大字符数
。将一个更高的值(8192)放入其中,然后重试……谢谢Shnugo,最后我将查询放入一个#Temp表中,然后在该表上运行pivot。这使得T-SQL更小并且能够完美运行。然后我删除了代码底部的#Temp表。@MartinLucas,很高兴看到你能解决你的问题。如果是我的回答让你找到了答案,那么你接受这个答案(投票柜台下面的支票)将是非常感谢的。你也可以投票支持这一点,但我认为你自己的声誉至少要达到15分。谢谢!好的,看起来生成的T-SQL太长了。当我使用你的方法时,我得到查询的一部分出现在消息选项卡中,并显示一条错误消息,其中第四个左连接被截断了一半。这正是我所说的。。。我想你是在SSMS工作。只需在查询窗口中单击鼠标右键并选择“选项”。在那里你可以找到文本
,还有一些默认设置为256的最大字符数
。将一个更高的值(8192)放入其中,然后重试……谢谢Shnugo,最后我将查询放入一个#Temp表中,然后在该表上运行pivot。这使得T-SQL更小并且能够完美运行。然后我删除了代码底部的#Temp表。@MartinLucas,很高兴看到你能解决你的问题。如果是我的回答让你找到了答案,那么你接受这个答案(投票柜台下面的支票)将是非常感谢的。你也可以投票支持这一点,但我认为你自己的声誉至少要达到15分。谢谢!