Генерирование CTE «идентификатор нескольких частей не может быть связан»

У меня есть хранимая процедура, использующая CTE, и она работает нормально. Недавно я перешел на новый сервер, и теперь он вызывает ошибку

Идентификатор многочастности «DOWNLOADS_downloadCategoryLink.categoryID» не может быть связан

Я могу исправить это, изменив уровень совместимости базы данных до 80 (SQL Server 2000), но я бы предпочел правильно исправить проблему – у кого есть идеи, в которых я ошибаюсь?

Хранимая процедура:

;WITH CTE( CategoryID, ParentCategoryID ) AS ( SELECT CategoryID, ParentCategoryID FROM DOWNLOADS_fileCategories WHERE CategoryID = @startCategoryID UNION ALL SELECT a.CategoryID, a.ParentCategoryID FROM DOWNLOADS_fileCategories a INNER JOIN CTE b ON b.CategoryID = a.ParentCategoryID ) SELECT CategoryID INTO #tempLinkTable FROM CTE set @query = 'SELECT TOP ' + cast(@noRecordsToReturn as varchar(5)) + ' DOWNLOADS_files.downloadID, DOWNLOADS_files.fileTypeID, DOWNLOADS_files.downloadName, DOWNLOADS_files.downloadFileName, DOWNLOADS_files.sizeInKb, DOWNLOADS_files.dateAdded, DOWNLOADS_files.visible, SYS_fileTypes.fileTypeName, SYS_fileTypes.fileTypeExtension FROM DOWNLOADS_files LEFT OUTER JOIN SYS_fileTypes ON DOWNLOADS_files.fileTypeID = SYS_fileTypes.fileTypeID INNER JOIN #tempLinkTable ON DOWNLOADS_downloadCategoryLink.categoryID = #tempLinkTable.categoryID ORDER BY DOWNLOADS_files.dateAdded DESC' exec(@query) 

У меня есть таблицы:

DOWNLOADS_files

 downloadID downloadFileName 

DOWNLOADS_fileCategories

 categoryID parentCategoryID categoryName 

DOWNLOADS_fileCategoryLink

 categoryID downloadID 

Большое спасибо!

боб

Динамический SQL генерирует запрос типа

 SELECT TOP 10 DOWNLOADS_files.downloadID, DOWNLOADS_files.fileTypeID, DOWNLOADS_files.downloadName, DOWNLOADS_files.downloadFileName, DOWNLOADS_files.sizeInKb, DOWNLOADS_files.dateAdded, DOWNLOADS_files.visible, SYS_fileTypes.fileTypeName, SYS_fileTypes.fileTypeExtension FROM DOWNLOADS_files LEFT OUTER JOIN SYS_fileTypes ON DOWNLOADS_files.fileTypeID = SYS_fileTypes.fileTypeID INNER JOIN #tempLinkTable ON DOWNLOADS_downloadCategoryLink.categoryID = #tempLinkTable.categoryID ORDER BY DOWNLOADS_files.dateAdded DESC 

Внутреннее условие соединения

  INNER JOIN #tempLinkTable ON DOWNLOADS_downloadCategoryLink.categoryID = #tempLinkTable.categoryID 

ссылается на таблицу DOWNLOADS_downloadCategoryLink , которая не существует в запросе. Я удивлен, что запрос когда-либо работал, но, возможно, произошла ошибка парсера, которая с тех пор исправлена.

Чтобы исправить это правильно, нам нужно было знать, к какому стандарту таблицы categoryID принадлежит.

Изменить: Возможно

 SELECT TOP (@noRecordsToReturn) DOWNLOADS_files.downloadID, DOWNLOADS_files.fileTypeID, DOWNLOADS_files.downloadName, DOWNLOADS_files.downloadFileName, DOWNLOADS_files.sizeInKb, DOWNLOADS_files.dateAdded, DOWNLOADS_files.visible, SYS_fileTypes.fileTypeName, SYS_fileTypes.fileTypeExtension FROM DOWNLOADS_files INNER JOIN DOWNLOADS_downloadCategoryLink ON DOWNLOADS_downloadCategoryLink.downloadID = DOWNLOADS_files.downloadID INNER JOIN #tempLinkTable ON DOWNLOADS_downloadCategoryLink.categoryID = #tempLinkTable.categoryID LEFT OUTER JOIN SYS_fileTypes ON DOWNLOADS_files.fileTypeID = SYS_fileTypes.fileTypeID ORDER BY DOWNLOADS_files.dateAdded DESC 
Давайте будем гением компьютера.