T_SQL 多部分标识符无法绑定错误

T_SQL The multi part identifier could not be bound error

我有一个查询工作正常,但我正在尝试从中创建一个动态枢轴以获得更好的最终结果 table。

我在 SO 上找到了这个,但我无法将它与我的问题联系起来。 The multi-part identifier could not be bound

我的工作代码是这样的:

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)

谁能看出这里是什么

韩国 马丁

尝试 SELECT @SQL 而不是 EXEC

您可能必须将输出设置为文本并使用 query options(右键单击查询 window)将文本输出的最大长度设置为更高的值(最大值为 8192) .

您可以将动态 SQL 的结果粘贴到新查询 window 中并在那里执行。您应该会收到一条语音错误消息,您甚至应该双击跳转到正确的位置...

祝你好运!