2015-09-10 4 views
0

Когда я перенес базу данных SQL Server в SQL Server 2012, у меня возникли проблемы с совместимостью для =*, и я сказал, что он используется для правильного внешнего соединения и внесения изменений в код следующим образом:Ошибка совместимости SQL Server 2012 для = *

--OLD CODE 
SELECT 
    EMPLOYEE_CODE 'EMPLOYEE CODE', MSKID 'MAERSKID', 
    isNull(FIRST_NAME,'') + ' ' + isNull(SECOND_NAME,'') + ' ' + isNull(THIRD_NAME,'') 'FULL NAME', 
    LM.LOCATION_NAME 'LOCATION', CM.COMPANY_NAME 'COMPANY', 
    DEPT.ACTIVITY_NAME 'DEPARTMENT',LVL.LEVEL_NAME 'LEVEL', 
    CARD_NUMBER 'CARD NO' 
FROM 
    smart2uat.dbo.EMPLOYEE_MAST EMP, smart2uat.dbo.ACTIVITY_MAST DEPT, 
    smart2uat.dbo.LEVEL_MAST LVL, smart2uat.dbo.LOCATION_MAST LM, 
    smart2uat.dbo.COMPANY_MAST CM 
WHERE 
    DEPT.ACTIVITY_CODE =* EMP.ACTIVITY_CODE AND 
    LVL.LEVEL_CODE =* EMP.LEVEL_CODE AND 
    LM.LOCATION_CODE =* EMP.LOCATION_CODE AND 
    CM.COMPANY_CODE =* EMP.COMPANY_CODE 

и я изменил код, как

--NEW CODE IN SQL SERVER 2012 
SELECT EMPLOYEE_CODE 'EMPLOYEE CODE', MSKID 'MAERSKID', isNull(FIRST_NAME,'') + ' ' + isNull(SECOND_NAME,'') + ' ' + isNull(THIRD_NAME,'') 'FULL NAME',  
    LM.LOCATION_NAME 'LOCATION', CM.COMPANY_NAME 'COMPANY', DEPT.ACTIVITY_NAME 'DEPARTMENT', 
    LVL.LEVEL_NAME 'LEVEL', CARD_NUMBER 'CARD NO' from 
    smart2uat.dbo.ACTIVITY_MAST DEPT right outer join smart2uat.dbo.EMPLOYEE_MAST EMP on DEPT.ACTIVITY_CODE = EMP.ACTIVITY_CODE , 
    smart2uat.dbo.LEVEL_MAST LVL right outer join EMP on LVL.LEVEL_CODE = EMP.LEVEL_CODE, 
    smart2uat.dbo.LOCATION_MAST LM right outer join EMP on LM.LOCATION_CODE = EMP.LOCATION_CODE , 
    smart2uat.dbo.COMPANY_MAST CM right outer join EMP on CM.COMPANY_CODE = EMP.COMPANY_CODE 

Я не получаю ожидаемый результат, как старый код и новый код ошибки метания. Является ли это преобразование из старого кода в новый код правильным? Заранее спасибо

+1

'и ошибка ввода нового кода. 'и где сообщение об ошибке? – lad2025

+0

@ lad2025..Я действительно не знаю, действительно ли эта трансформация. И сообщение об ошибке - 'Неверное имя объекта 'EMP'' – METALHEAD

+1

Я думаю, что ваша трансформация неверна. См. Мой ответ. – lad2025

ответ

1

Мне кажется, вам нужны все записи от EMPLOYEE_MAST с LEFT JOIN к остальным столам. Также используйте CONCAT вместо + для строк.

SELECT 
    [EMPLOYEE CODE] = EMPLOYEE_CODE 
    ,[MAERSKID]  = MSKID 
    ,[FULL NAME] = CONCAT(FIRST_NAME,' ',SECOND_NAME,' ',THIRD_NAME) 
    ,[LOCATION]  = LM.LOCATION_NAME 
    ,[COMPANY]  = CM.COMPANY_NAME 
    ,[DEPARTMENT] = DEPT.ACTIVITY_NAME 
    ,[LEVEL]  = LVL.LEVEL_NAME 
    ,[CARD NO]  = CARD_NUMBER 
FROM smart2uat.dbo.EMPLOYEE_MAST EMP 
LEFT JOIN smart2uat.dbo.ACTIVITY_MAST DEPT 
    ON DEPT.ACTIVITY_CODE = EMP.ACTIVITY_CODE 
LEFT JOIN smart2uat.dbo.LEVEL_MAST LVL 
    ON LVL.LEVEL_CODE = EMP.LEVEL_CODE 
LEFT JOIN smart2uat.dbo.LOCATION_MAST LM 
    ON LM.LOCATION_CODE = EMP.LOCATION_CODE 
LEFT JOIN smart2uat.dbo.COMPANY_MAST CM 
    ON CM.COMPANY_CODE = EMP.COMPANY_CODE; 
+0

Нулевые записи, в таблице? Измените внешнюю связь слева направо, а затем нажмите «Полный» и посмотрите, помогает ли она? –

+0

@ lad2025 Привет, чувак .... Спасибо за ваш ответ. Я не получаю точного ответа. of records..old код, дающий около 7000 строк, в то время как новый 4000 – METALHEAD

+0

Привет мужчина .... @ lad2025 ... большое спасибо за ваш ответ ... код работает supe fine ....... – METALHEAD

1

Избавиться от этих запятых в предложении FROM. Попробуйте это вместо этого для вашего пункта FROM

from 
    smart2uat.dbo.ACTIVITY_MAST DEPT 
    right outer join smart2uat.dbo.EMPLOYEE_MAST EMP 
     on DEPT.ACTIVITY_CODE = EMP.ACTIVITY_CODE 
    right outer join smart2uat.dbo.LEVEL_MAST LVL 
     on LVL.LEVEL_CODE = EMP.LEVEL_CODE 
    right outer join smart2uat.dbo.LOCATION_MAST LM 
     on LM.LOCATION_CODE = EMP.LOCATION_CODE 
    right outer join smart2uat.dbo.COMPANY_MAST CM 
     on CM.COMPANY_CODE = EMP.COMPANY_CODE 
+0

спасибо за человека за Ур ответ .... – METALHEAD

Смежные вопросы