Я занимаюсь обновлением до SQL Server 2012 с 2005 года и столкнулся с синтаксической ошибкой, с которой мне нужна помощь. Синтаксическая ошибка на самом деле находится в базе данных, которая была построена в 2000 году, поэтому проблема совместимости не может быть исправлена в настройках.SQL 2005 - 2012
Select PPB.*,
SUBSTRING(STUFF((select license_id as k --*
FROM LMACatscan..license AS L
WHERE L.archived = 0
AND ((L.ppb_id IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id))
OR (L.ppb_id_2 IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id)))
FOR XML PATH('')),1,0,''),2,999999)
FROM LMACatscan..ppb AS PPB
WHERE state_code > ''
Результаты 2005 являются: От 20012 вы можете увидеть столбец без имени имеет то же значение для всех строк, и это где проблема: Как всегда, любая помощь приветствуется!
Легендарный! Это прекрасно решает мою проблему. У вас возникли какие-либо идеи относительно того, почему он работал в 2005 году? – Bmize729
Я не уверен на 100%, но я считаю, что это связано с тем, что в 2005 году псевдоним внутри скобок (PPB) не смотрел таблицу PPB внутри скобок, тогда как в 2008 году это было. Например, если вы переименовали псевдоним таблицы вне скобок, скажем, PPBX, и запустили тот же запрос, заменив PPB.ppb_id в скобках с помощью PPBX.ppb_id, это сработало бы. – ZLK
, например. Выберите PPBX *, SUBSTRING (ВЕЩЕСТВО ((выберите license_id при к -. * ОТ LMACatscan..license КАК L ГДЕ L.archived = 0 И ((L.ppb_id В (ВЫБРАТЬ ppb_id ОТ LMACatscan. .ppb WHERE ppb_id = PPBX.ppb_id)) OR (L.ppb_id_2 IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPBX.ppb_id))) FOR XML PATH ('')), 1,0, ''), 2,999999) ОТ LMACatscan..ppb AS PPBX ГДЕ state_code> «» (это, вероятно, также работать в 2008 году, хотя я не проверял) – ZLK